常见协议下的邮件发送

大多项目中,客户会有邮件通知的需求。若客户环境为外网的话,可以安装邮件发送的客户端,我们就可以使用设计器中的组件,直接实现邮件发送的功能。但是很多情况下。客户环境不能够连接外网,那么怎么实现发邮件功能呢?

我们在邮件发送之前需要先了解,客户环境下邮件发送协议是什么,常见协议有 SSL 和 TSL,具体的区别可以看这里。http://www.techug.com/post/https-ssl-tls.html

了解完这两个模式的区别后,我们再来看代码。
这里提供两种模式下的邮件发送的代码
ssl 模式下的邮件发送实例

coding:utf-8 #强制使用utf-8编码格式

import smtplib #加载smtplib模块

from email.mime.text import MIMEText

from email.utils import formataddr

my_sender='15758412271@163.com' #发件人邮箱账号

my_user='185325121244127@qq.com' #收件人邮箱账号

def mail():

  ret=True

  try:

	msg=MIMEText('填写邮件内容','plain','utf-8')

	msg['From']=formataddr(["发件人邮箱昵称",my_sender]) #括号里的对应发件人邮箱昵称、发件人邮箱账号

	msg['To']=formataddr(["收件人邮箱昵称",my_user]) #括号里的对应收件人邮箱昵称、收件人邮箱账号

	msg['Subject']="主题" #邮件的主题,也可以说是标题

	server=smtplib.SMTP("smtp.163.com",25) #发件人邮箱中的SMTP服务器,端口是25

	server.login(my_sender,"**************") #括号中对应的是发件人邮箱账号、邮箱密码

	server.sendmail(my_sender,[my_user,],msg.as_string()) #括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件

	server.quit() #这句是关闭连接的意思

  except Exception: #如果try中的语句没有执行,则会执行下面的ret=False

	ret=False

  return ret

ret=mail()

if ret:

  print("ok") #如果发送成功则会返回ok,稍等20秒左右就可以收到邮件

else:

  print("filed") #如果发送失败则会返回filed

tsl 模式下的邮件发送实例

# -*- coding: UTF-8 -*-

import smtplib
from email.mime.text
import MIMEText
from email.header
import Header

mail_host="10.111.111.111"

mail_user='XIAOM'

mail_pw=''********“

sender='XIAOM@isearch.com.cn'

receivers=['xiaoh@isearch.com.cn']

message=MIMEText('RPA流程运行结束,请及时查看结果','plain','utf-8');

#message['From'] =Header('Isearch','utf-8')

message['From'] =sender

#message['To'] =Header('isearch-XM@isearch.com.cn','utf-8')

message['To']=",".join(receivers)

subject='查看流程结果通知'XM

message['Subject'] =Header(subject,'utf-8')

try:

smtpObj =smtplib.SMTP(mail_host,25)#.SMTP_SSL(mail_host,25)

#smtpObj.connect()

#smtpObj.set_debuglevel(True)

smtpObj.ehlo()

smtpObj.starttls()

smtpObj.ehlo()

smtpObj.login(mail_user,mail_pw)

smtpObj.sendmail(sender,receivers,message.as_string())

print("邮件发送成功")

except
smtplib.SMTPException as e:

#print("ERROR:无法发送邮件")

print(e)

希望可以帮到大家。