发送email¶
使用python发送邮件。
思路¶
申请邮箱,发送邮件python代码,生成exe
依赖¶
- python3
- smtplib(邮箱模块)
- argparse(命令行解析)
- pyinstaller(生成windows平台的exe)
代码¶
``` #!/usr/bin/python3
import smtplib from email.mime.text import MIMEText from email.header import Header import argparse
- def send_mail(mail_host, mail_user, mail_pass, sender, receiver, subject, contents):
""" 发送邮件 :param mail_host: smtp地址,例如smtp.139.com :param mail_user: 用户名 :param mail_pass: 邮箱密码 :param sender: 发送人,例如xxx@139.com :param receiver: 接收人,例如xxx@139.com :param subject: 主题 :param contents: 内容 :return: 是否发送成功 """ mail_user = str(mail_user) mail_pass = str(mail_pass) subject = str(subject) contents = str(contents)
message = MIMEText(contents, 'plain', 'utf-8') message['From'] = Header(sender, 'utf-8') message['To'] = Header(receiver, 'utf-8') message['Subject'] = Header(subject, 'utf-8') try:
smtp_obj = smtplib.SMTP() smtp_obj.connect(mail_host, 25) # 25 为 SMTP 端口号 smtp_obj.login(mail_user, mail_pass) smtp_obj.sendmail(sender, receiver, message.as_string()) print('Send Success') return True- except smtplib.SMTPException:
- print('Send False') return False
- if __name__ == '__main__':
- parser = argparse.ArgumentParser(description='发送邮件') parser.add_argument('--mail_host', help='smtp地址,例如smtp.139.com', type=str) parser.add_argument('--mail_user', help='用户名', type=str) parser.add_argument('--mail_pass', help='邮箱密码', type=str) parser.add_argument('--sender', help='发送人,例如xxx@139.com', type=str) parser.add_argument('--receiver', help='接收人,例如xxx@139.com', type=str) parser.add_argument('--subject', help='主题', type=str) parser.add_argument('--contents', help='内容', type=str) args = parser.parse_args() send_mail(args.mail_host, args.mail_user, args.mail_pass, args.sender, args.receiver, args.subject, args.contents)
编译¶
`
C:\Anaconda3\Scripts>pyinstaller.exe -F -c send_email.py
`
-F作用是生成的exe不需要其他依赖。
最后生成send_email.exe
使用¶
`
C:\Anaconda3\Scripts\dist>send_email.exe --help
`
可以得到帮助
其他问题¶
如果使用fire模块解析命令行参数,pyinstaller编译出来的exe特别大200MB+。故使用argparse。
中文乱码问题。如果使用批处理调用send_email且批处理包含中文,批处理文件的格式应该改为ANSI格式。
有时不在常用地登陆139邮箱需要验证。需要在该个地方用电脑或者手机登陆过后,再运行该程序。