编辑
2022-10-30
CS_杂项
0
请注意,本文编写于 762 天前,最后修改于 718 天前,其中某些信息可能已经过时。

目录

使用python进行邮件发送
发送文本信息
发送携带附件的邮件
参考

使用python进行邮件发送

需求:因为有时候会在服务器上进行模型的训练,希望能够及时获得模型训练的消息便加入此功能

同时为了方便调用,我将这个代码处理成为了函数。

因为本人只提供一个通知功能,对于邮件内其他内容,如附件等仅做简单讨论,其他情况读者可以自行搜索,尝试。

发送文本信息

send_email_text

python
def send_email_text( from_addr: str, password: str, to_addr: str, smtp_server: str, text: str, from_who: str, to_who: str, theme: str, ) -> bool: r""" 发送纯文本邮件到指定邮箱地址 Args: from_addr (str):发送方的邮件地址 password (str):smtp授权码 to_addr (str):接收方邮件地址 smtp_server (str):发送方服务器,例,若发送方为@qq.com则发送方服务器为smtp.qq.com text (str):邮件内容 from_who (str):发送方名称 to_who (str):接收方名称 theme (str):邮件主题 Returns: send_flag (bool):是否成功发送邮件 """ import smtplib # smtplib 用于邮件的发信动作 from email.mime.text import MIMEText # email 用于构建邮件内容 from email.header import Header # 构建邮件头 # 邮件内容 msg = MIMEText(text, "plain", "utf-8") msg["From"] = Header(from_who) # 发送者 msg["To"] = Header(to_who) # 接收者 subject = theme msg["Subject"] = Header(theme, "utf-8") # 邮件主题 try: smtpobj = smtplib.SMTP_SSL(smtp_server) smtpobj.connect(smtp_server, 465) # 建立连接--qq邮箱服务和端口号(可百度查询) smtpobj.login(from_addr, password) # 登录--发送者账号和口令 smtpobj.sendmail(from_addr, to_addr, msg.as_string()) send_flag = True except smtplib.SMTPException: send_flag = False finally: # 关闭服务器 smtpobj.quit() return send_flag

调用例子:

python
print( send_email_text( from_addr="---", password="---", to_addr="---", smtp_server="smtp.qq.com", text="test send_email function", from_who="Geaming", to_who="another Geaming", theme="function test", ) )

image-20221030022140713

image-20221030022249261

特别提醒

在调用时候请注意发送方服务器和对应端口。

发送携带附件的邮件

有些时候可能会有携带一些附件的发送需求,提供函数如下:

新增入参:

python
attachments (List[str]):附件地址列表 attachments_name (List[str]):附件名称列表
python
import typing def send_email( from_addr: str, password: str, to_addr: str, smtp_server: str, text: str, from_who: str, to_who: str, theme: str, attachments: typing.List[str], attachments_name: typing.List[str], ) -> bool: r""" 发送纯文本邮件到指定邮箱地址 Args: from_addr (str):发送方的邮件地址 password (str):smtp授权码 to_addr (str):接收方邮件地址 smtp_server (str):发送方服务器,例,若发送方为@qq.com则发送方服务器为smtp.qq.com text (str):邮件内容 from_who (str):发送方名称 to_who (str):接收方名称 theme (str):邮件主题 attachments (List[str]):附件地址列表 attachments_name (List[str]):附件名称列表 Returns: send_flag (bool):是否成功发送邮件 """ import smtplib # smtplib 用于邮件的发信动作 from email.mime.text import MIMEText # email 用于构建邮件内容 from email.mime.multipart import MIMEMultipart from email.header import Header # 构建邮件头 # 邮件内容 msg = MIMEMultipart() msg.attach(MIMEText(text, "plain", "utf-8")) msg["From"] = Header(from_who) # 发送者 msg["To"] = Header(to_who) # 接收者 subject = theme msg["Subject"] = Header(theme, "utf-8") # 邮件主题 for idx, att_path in enumerate(attachments): att = MIMEText(open(att_path, "rb").read(), "base64", "utf-8") att["Content-Type"] = "application/octet-stream" # 这里的filename可以任意写,写什么名字,邮件中显示什么名字 att["Content-Disposition"] = f'attachment; filename="{attachments_name[idx]}"' msg.attach(att) try: smtpobj = smtplib.SMTP_SSL(smtp_server) smtpobj.connect(smtp_server, 465) # 建立连接--qq邮箱服务和端口号(可百度查询) smtpobj.login(from_addr, password) # 登录--发送者账号和口令 smtpobj.sendmail(from_addr, to_addr, msg.as_string()) send_flag = True except smtplib.SMTPException: send_flag = False finally: # 关闭服务器 smtpobj.quit() return send_flag

调用例子:

python
print( send_email( from_addr="---", password="---", to_addr="---", smtp_server="smtp.qq.com", text="test send_email function", from_who="Geaming", to_who="another Geaming", theme="function test", attachments=[ r"---\1.jpg", r"---\1.txt", ], attachments_name=["1.jpg", "1.txt"], ) )

image-20221030024419317

image-20221030024629660

特别提醒

在调用时候,附件传入路径请使用raw string。

参考

本文作者:Geaming

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!