用Python写一个异步邮件发送代码
时间: 2024-03-28 14:15:35 浏览: 11
以下是用Python写一个异步邮件发送代码的示例:
```python
import asyncio
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.utils import COMMASPACE, formatdate
async def send_email(from_addr, to_addrs, subject, message, attachments=None):
message = MIMEMultipart()
message['From'] = from_addr
message['To'] = COMMASPACE.join(to_addrs)
message['Date'] = formatdate(localtime=True)
message['Subject'] = subject
text = MIMEText(message)
message.attach(text)
if attachments:
for attachment in attachments:
with open(attachment, 'rb') as file:
img_data = file.read()
image = MIMEImage(img_data, name=attachment.split('/')[-1])
message.attach(image)
smtp_server = smtplib.SMTP('smtp.gmail.com', 587)
smtp_server.starttls()
smtp_server.login(from_addr, 'password')
await smtp_server.sendmail(from_addr, to_addrs, message.as_string())
smtp_server.quit()
loop = asyncio.get_event_loop()
loop.run_until_complete(send_email('sender@gmail.com', ['recipient@gmail.com'], 'Test email', 'This is a test email', ['image.png']))
loop.close()
```
此代码使用Python标准库中的smtplib和asyncio模块。在send_email函数中,我们创建了一个MIMEMultipart对象,该对象包含了邮件的文本和附件。然后我们连接到SMTP服务器,使用starttls()方法启用TLS加密,并登录到SMTP服务器。最后,我们使用sendmail()方法发送邮件,并使用quit()方法关闭SMTP连接。
在主程序中,我们使用asyncio模块的get_event_loop()方法获取事件循环,然后使用run_until_complete()方法运行异步任务。最后,我们使用close()方法关闭事件循环。