对于邮箱协议和常用的服务器配置,请见 here
使用个人邮箱和企业邮箱的代码有点差别
使用个人邮箱,QQ为例
密码使用qq的授权码,进入网页版qq邮箱->账号下smtp服务部分可看见
#发送邮件通知成绩
for stu in student:
smtpObj = smtplib.SMTP('smtp.qq.com', 587)
#smtpObj.set_debuglevel(1) # 方便debug
smtpObj.ehlo()
smtpObj.starttls()
scoresend = str(int(exam) * int(exam_proportion) / 100 + int(dailyscore) * int(
dailyscore_proportion) / 100 + int(homework) * int(homework_proportion) / 100 + int(
checkscore) * int(checkscore_proportion) / 100 + int(experiment) * int(
experiment_proportion) / 100)
text = 'Subject: ' + courseTitle + ' score is: ' + scoresend # 邮件内容
msg = MIMEText(text)
if float(scoresend) >= 60:
msg['Subject'] = u'Score Indicate'
else:
msg['Subject'] = u'WARNING'
#将example替换成你的QQ号码
msg['From'] = 'example@qq.com'
msg['To'] = stu.email
#将example替换成你的QQ号码,并填写password,此处的password不是QQ密码,而是腾讯授权码
smtpObj.login('example@qq.com', '授权码')
smtpObj.sendmail(msg['From'], msg['To'], msg.as_string())
smtpObj.quit()
使用企业邮箱
如果使用的是企业邮箱,那么需要将smtpObj = smtplib.SMTP('smtp.qq.com', 587)
替换为smtpObj = smtplib.SMTP_SSL('smtp.exmail.qq.com', 465)
。
此外,需要将如下两行代码注释掉:
# smtpObj.ehlo()
# smtpObj.starttls()
注意此处的企业邮箱密码并非授权码,是登录密码
smtpObj = smtplib.SMTP_SSL('smtp.exmail.qq.com', 465)
# smtpObj.ehlo()
# smtpObj.starttls()
context['site'] = site_url()
context['site_name'] = config.site_name
message = render_to_string(template_name, context)
subject = ''.join(subject.splitlines())
msg = MIMEText(message)
msg['Subject'] = subject
msg['From'] = '企业邮箱账号'
msg['To'] = to[0]
smtpObj.login('企业邮箱账号', '企业邮箱密码')
smtpObj.sendmail(msg['From'], msg['To'], msg.as_string())
smtpObj.quit()
补充
常用邮箱SMTP加密方式
使用上述SMTP协议发送邮件实则发送的是明文邮件,如果想要加密,有如下几种方式。
1)明文传输: 端口号是25
。
server = smtplib.SMTP(smtp_sever,25)
2)SSL加密: 端口号是465
,通信过程加密,邮件数据安全。
server = smtplib.SMTP_SSL(smtp_sever,465)
3)TLS加密: 端口号是587
,通信过程加密,邮件数据安全,使用正常的smtp端口。对于TLS加密方式需要先建立SSL连接,然后再发送邮件。此处使用starttls()
来建立安全连接
server = smtplib.SMTP(smtp_sever,587)
server.starttls()
不同邮箱支持不同的加密协议,常用邮箱支持的加密方式和对应端口号如下:
邮箱 | SMTP服务器 | 端口号 | 支持加密方式 |
---|---|---|---|
163 | smtp.163.com | 25/465 | 明文/SSL加密 |
126 | smtp.126.com | 25/465 | 明文/SSL加密 |
smtp.qq.com | 25/465/587 | 明文/SSL加密/TLS加密 | |
Gmail | smtp.gmail.com | 587 | TLS加密 |
登录gmail常见问题
如果使用gmail
作为发送方,除了SMTP服务器要改成smtp.gmail.com
外,还需要把端口改成587
,密码直接使用gmail的登录密码即可。但依然可能会登录失败。原因是目前gmail对安全性较低的应用的访问权限进行控制,我们需要手动设置。点击进行Gmail安全性较低的应用的访问权限设置,点击界面如下,设置启用即可。
exchange server 发送邮件
def Email(to, content):
urllib3.disable_warnings()
creds = Credentials(
username='algex\spsaccount',
password='Spsaccount'
)
config = Configuration(server="smtp.algex.asmpt.com", credentials=creds, auth_type=NTLM)
account = Account(
primary_smtp_address='Spsaccount@alg.asmpt.com',
credentials=creds,
autodiscover=False,
config=config,
access_type=DELEGATE
)
m = Message(
account=account,
subject="Guest pass key generated",
body=HTMLBody(content),
to_recipients = [Mailbox(email_address=to)],
cc_recipients = [Mailbox(email_address=cc)],
)
m.send()
参考
https://blog.csdn.net/zyx_ly/article/details/88024031
https://www.cnblogs.com/jpinsz/p/12418876.html
https://www.cnblogs.com/jpinsz/p/12420991.html
https://blog.csdn.net/qq_21649903/article/details/113612153?ops_request_misc=&request_id=&biz_id=102&utm_term=%25E4%25BD%25BF%25E7%2594%25A8python%25E5%258F%2591%25E9%2580%2581%25E4%25B8%25AA%25E4%25BA%25BA%25E9%2582%25AE%25E7%25AE%25B1%25E5%2592%258C%25E4%25BC%2581%25E4%25B8%259A%25E9%2582%25AE%25E7%25AE%25B1%25E5%258C%25BA%25E5%2588%25AB&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-113612153.pc_search_result_hbase_insert