发送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邮箱需要验证。需要在该个地方用电脑或者手机登陆过后,再运行该程序。