We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[SES] Does not properly verify mailbox with display name
https://tools.ietf.org/html/rfc2822.html#section-3.4 defines two forms of valid mailbox:

* `foo@example.com`
* `"Foo Bar" <foo@example.com>`

SES supports both of these forms. Per https://github.com/spulec/moto/blob/master/moto/ses/models.py#L55, only the first form is supported by moto.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `moto/ses/models.py`
Content:
```
1 from __future__ import unicode_literals
2 
3 import email
4 from email.utils import parseaddr
5 
6 from moto.core import BaseBackend, BaseModel
7 from .exceptions import MessageRejectedError
8 from .utils import get_random_message_id
9 
10 
11 RECIPIENT_LIMIT = 50
12 
13 
14 class Message(BaseModel):
15 
16     def __init__(self, message_id, source, subject, body, destinations):
17         self.id = message_id
18         self.source = source
19         self.subject = subject
20         self.body = body
21         self.destinations = destinations
22 
23 
24 class RawMessage(BaseModel):
25 
26     def __init__(self, message_id, source, destinations, raw_data):
27         self.id = message_id
28         self.source = source
29         self.destinations = destinations
30         self.raw_data = raw_data
31 
32 
33 class SESQuota(BaseModel):
34 
35     def __init__(self, sent):
36         self.sent = sent
37 
38     @property
39     def sent_past_24(self):
40         return self.sent
41 
42 
43 class SESBackend(BaseBackend):
44 
45     def __init__(self):
46         self.addresses = []
47         self.email_addresses = []
48         self.domains = []
49         self.sent_messages = []
50         self.sent_message_count = 0
51 
52     def _is_verified_address(self, address):
53         if address in self.addresses:
54             return True
55         user, host = address.split('@', 1)
56         return host in self.domains
57 
58     def verify_email_identity(self, address):
59         self.addresses.append(address)
60 
61     def verify_email_address(self, address):
62         self.email_addresses.append(address)
63 
64     def verify_domain(self, domain):
65         self.domains.append(domain)
66 
67     def list_identities(self):
68         return self.domains + self.addresses
69 
70     def list_verified_email_addresses(self):
71         return self.email_addresses
72 
73     def delete_identity(self, identity):
74         if '@' in identity:
75             self.addresses.remove(identity)
76         else:
77             self.domains.remove(identity)
78 
79     def send_email(self, source, subject, body, destinations):
80         recipient_count = sum(map(len, destinations.values()))
81         if recipient_count > RECIPIENT_LIMIT:
82             raise MessageRejectedError('Too many recipients.')
83         if not self._is_verified_address(source):
84             raise MessageRejectedError(
85                 "Email address not verified %s" % source
86             )
87 
88         message_id = get_random_message_id()
89         message = Message(message_id, source, subject, body, destinations)
90         self.sent_messages.append(message)
91         self.sent_message_count += recipient_count
92         return message
93 
94     def send_raw_email(self, source, destinations, raw_data):
95         if source is not None:
96             _, source_email_address = parseaddr(source)
97             if source_email_address not in self.addresses:
98                 raise MessageRejectedError(
99                     "Did not have authority to send from email %s" % source_email_address
100                 )
101 
102         recipient_count = len(destinations)
103         message = email.message_from_string(raw_data)
104         if source is None:
105             if message['from'] is None:
106                 raise MessageRejectedError(
107                     "Source not specified"
108                 )
109 
110             _, source_email_address = parseaddr(message['from'])
111             if source_email_address not in self.addresses:
112                 raise MessageRejectedError(
113                     "Did not have authority to send from email %s" % source_email_address
114                 )
115 
116         for header in 'TO', 'CC', 'BCC':
117             recipient_count += sum(
118                 d.strip() and 1 or 0
119                 for d in message.get(header, '').split(',')
120             )
121         if recipient_count > RECIPIENT_LIMIT:
122             raise MessageRejectedError('Too many recipients.')
123 
124         self.sent_message_count += recipient_count
125         message_id = get_random_message_id()
126         message = RawMessage(message_id, source, destinations, raw_data)
127         self.sent_messages.append(message)
128         return message
129 
130     def get_send_quota(self):
131         return SESQuota(self.sent_message_count)
132 
133 
134 ses_backend = SESBackend()
135
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/moto/ses/models.py b/moto/ses/models.py
--- a/moto/ses/models.py
+++ b/moto/ses/models.py
@@ -49,7 +49,8 @@
         self.sent_messages = []
         self.sent_message_count = 0
 
-    def _is_verified_address(self, address):
+    def _is_verified_address(self, source):
+        _, address = parseaddr(source)
         if address in self.addresses:
             return True
         user, host = address.split('@', 1)

{"golden_diff": "diff --git a/moto/ses/models.py b/moto/ses/models.py\n--- a/moto/ses/models.py\n+++ b/moto/ses/models.py\n@@ -49,7 +49,8 @@\n         self.sent_messages = []\n         self.sent_message_count = 0\n \n-    def _is_verified_address(self, address):\n+    def _is_verified_address(self, source):\n+        _, address = parseaddr(source)\n         if address in self.addresses:\n             return True\n         user, host = address.split('@', 1)\n", "issue": "[SES] Does not properly verify mailbox with display name\nhttps://tools.ietf.org/html/rfc2822.html#section-3.4 defines two forms of valid mailbox:\r\n\r\n* `foo@example.com`\r\n* `\"Foo Bar\" <foo@example.com>`\r\n\r\nSES supports both of these forms. Per https://github.com/spulec/moto/blob/master/moto/ses/models.py#L55, only the first form is supported by moto.\n", "before_files": [{"content": "from __future__ import unicode_literals\n\nimport email\nfrom email.utils import parseaddr\n\nfrom moto.core import BaseBackend, BaseModel\nfrom .exceptions import MessageRejectedError\nfrom .utils import get_random_message_id\n\n\nRECIPIENT_LIMIT = 50\n\n\nclass Message(BaseModel):\n\n    def __init__(self, message_id, source, subject, body, destinations):\n        self.id = message_id\n        self.source = source\n        self.subject = subject\n        self.body = body\n        self.destinations = destinations\n\n\nclass RawMessage(BaseModel):\n\n    def __init__(self, message_id, source, destinations, raw_data):\n        self.id = message_id\n        self.source = source\n        self.destinations = destinations\n        self.raw_data = raw_data\n\n\nclass SESQuota(BaseModel):\n\n    def __init__(self, sent):\n        self.sent = sent\n\n    @property\n    def sent_past_24(self):\n        return self.sent\n\n\nclass SESBackend(BaseBackend):\n\n    def __init__(self):\n        self.addresses = []\n        self.email_addresses = []\n        self.domains = []\n        self.sent_messages = []\n        self.sent_message_count = 0\n\n    def _is_verified_address(self, address):\n        if address in self.addresses:\n            return True\n        user, host = address.split('@', 1)\n        return host in self.domains\n\n    def verify_email_identity(self, address):\n        self.addresses.append(address)\n\n    def verify_email_address(self, address):\n        self.email_addresses.append(address)\n\n    def verify_domain(self, domain):\n        self.domains.append(domain)\n\n    def list_identities(self):\n        return self.domains + self.addresses\n\n    def list_verified_email_addresses(self):\n        return self.email_addresses\n\n    def delete_identity(self, identity):\n        if '@' in identity:\n            self.addresses.remove(identity)\n        else:\n            self.domains.remove(identity)\n\n    def send_email(self, source, subject, body, destinations):\n        recipient_count = sum(map(len, destinations.values()))\n        if recipient_count > RECIPIENT_LIMIT:\n            raise MessageRejectedError('Too many recipients.')\n        if not self._is_verified_address(source):\n            raise MessageRejectedError(\n                \"Email address not verified %s\" % source\n            )\n\n        message_id = get_random_message_id()\n        message = Message(message_id, source, subject, body, destinations)\n        self.sent_messages.append(message)\n        self.sent_message_count += recipient_count\n        return message\n\n    def send_raw_email(self, source, destinations, raw_data):\n        if source is not None:\n            _, source_email_address = parseaddr(source)\n            if source_email_address not in self.addresses:\n                raise MessageRejectedError(\n                    \"Did not have authority to send from email %s\" % source_email_address\n                )\n\n        recipient_count = len(destinations)\n        message = email.message_from_string(raw_data)\n        if source is None:\n            if message['from'] is None:\n                raise MessageRejectedError(\n                    \"Source not specified\"\n                )\n\n            _, source_email_address = parseaddr(message['from'])\n            if source_email_address not in self.addresses:\n                raise MessageRejectedError(\n                    \"Did not have authority to send from email %s\" % source_email_address\n                )\n\n        for header in 'TO', 'CC', 'BCC':\n            recipient_count += sum(\n                d.strip() and 1 or 0\n                for d in message.get(header, '').split(',')\n            )\n        if recipient_count > RECIPIENT_LIMIT:\n            raise MessageRejectedError('Too many recipients.')\n\n        self.sent_message_count += recipient_count\n        message_id = get_random_message_id()\n        message = RawMessage(message_id, source, destinations, raw_data)\n        self.sent_messages.append(message)\n        return message\n\n    def get_send_quota(self):\n        return SESQuota(self.sent_message_count)\n\n\nses_backend = SESBackend()\n", "path": "moto/ses/models.py"}], "after_files": [{"content": "from __future__ import unicode_literals\n\nimport email\nfrom email.utils import parseaddr\n\nfrom moto.core import BaseBackend, BaseModel\nfrom .exceptions import MessageRejectedError\nfrom .utils import get_random_message_id\n\n\nRECIPIENT_LIMIT = 50\n\n\nclass Message(BaseModel):\n\n    def __init__(self, message_id, source, subject, body, destinations):\n        self.id = message_id\n        self.source = source\n        self.subject = subject\n        self.body = body\n        self.destinations = destinations\n\n\nclass RawMessage(BaseModel):\n\n    def __init__(self, message_id, source, destinations, raw_data):\n        self.id = message_id\n        self.source = source\n        self.destinations = destinations\n        self.raw_data = raw_data\n\n\nclass SESQuota(BaseModel):\n\n    def __init__(self, sent):\n        self.sent = sent\n\n    @property\n    def sent_past_24(self):\n        return self.sent\n\n\nclass SESBackend(BaseBackend):\n\n    def __init__(self):\n        self.addresses = []\n        self.email_addresses = []\n        self.domains = []\n        self.sent_messages = []\n        self.sent_message_count = 0\n\n    def _is_verified_address(self, source):\n        _, address = parseaddr(source)\n        if address in self.addresses:\n            return True\n        user, host = address.split('@', 1)\n        return host in self.domains\n\n    def verify_email_identity(self, address):\n        self.addresses.append(address)\n\n    def verify_email_address(self, address):\n        self.email_addresses.append(address)\n\n    def verify_domain(self, domain):\n        self.domains.append(domain)\n\n    def list_identities(self):\n        return self.domains + self.addresses\n\n    def list_verified_email_addresses(self):\n        return self.email_addresses\n\n    def delete_identity(self, identity):\n        if '@' in identity:\n            self.addresses.remove(identity)\n        else:\n            self.domains.remove(identity)\n\n    def send_email(self, source, subject, body, destinations):\n        recipient_count = sum(map(len, destinations.values()))\n        if recipient_count > RECIPIENT_LIMIT:\n            raise MessageRejectedError('Too many recipients.')\n        if not self._is_verified_address(source):\n            raise MessageRejectedError(\n                \"Email address not verified %s\" % source\n            )\n\n        message_id = get_random_message_id()\n        message = Message(message_id, source, subject, body, destinations)\n        self.sent_messages.append(message)\n        self.sent_message_count += recipient_count\n        return message\n\n    def send_raw_email(self, source, destinations, raw_data):\n        if source is not None:\n            _, source_email_address = parseaddr(source)\n            if source_email_address not in self.addresses:\n                raise MessageRejectedError(\n                    \"Did not have authority to send from email %s\" % source_email_address\n                )\n\n        recipient_count = len(destinations)\n        message = email.message_from_string(raw_data)\n        if source is None:\n            if message['from'] is None:\n                raise MessageRejectedError(\n                    \"Source not specified\"\n                )\n\n            _, source_email_address = parseaddr(message['from'])\n            if source_email_address not in self.addresses:\n                raise MessageRejectedError(\n                    \"Did not have authority to send from email %s\" % source_email_address\n                )\n\n        for header in 'TO', 'CC', 'BCC':\n            recipient_count += sum(\n                d.strip() and 1 or 0\n                for d in message.get(header, '').split(',')\n            )\n        if recipient_count > RECIPIENT_LIMIT:\n            raise MessageRejectedError('Too many recipients.')\n\n        self.sent_message_count += recipient_count\n        message_id = get_random_message_id()\n        message = RawMessage(message_id, source, destinations, raw_data)\n        self.sent_messages.append(message)\n        return message\n\n    def get_send_quota(self):\n        return SESQuota(self.sent_message_count)\n\n\nses_backend = SESBackend()\n", "path": "moto/ses/models.py"}]}