SMTP协议
协议简介:
- SMTP协议(simple mail transfer protocol) 简单邮件传输协议
- 定义了邮件客户端与SMTP服务器之间、两台SMTP服务器之间的通信规则
- 分为标准SMTP协议和扩展SMTP协议。扩展SMTP协议在标准SMTP协议上增加了邮件安全的认证 通信双方采用一问一答的命令/响应模式
- 底层基于TCP/IP的应用层协议、默认网络监听号25
SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用SMTP协议。SMTP协议的默认TCP端口号是25。使用SMTP协议发送的邮件需要开启SMTP协议,如没有,则需要开启。
Code
#!/usr/bin/python
# -*- coding: utf-8 -*-
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr,formataddr
# set from=m18056xxxx186@163.com
# set smtp=smtp.163.com
# set smtp-auth-password=WHYSAxxxxXSMFY
# set smtp-auth=login
class MailSender:
def __init__(self):
self.__fromaddr = 'm18056xxxx86@163.com'
self.__password = 'WHYSxxxxXSMFY'
self._mail_host = 'smtp.163.com'
self._recevier_list = '1018xxxx352@qq.com'
self._subject = 'Message from Linux:'
# @param | list | recevier_list | 收件人列表
# @param | string | subject | 邮件主题
# @parma | string | text_message | 邮件正文内容
# @param | list | attach_file_list | 附件列表
def send(self,text_message):
# 自定义处理邮件收发地址的显示内容
def _format_addr(s):
name, addr = parseaddr(s)
# 将邮件的name转换成utf-8格式,addr如果是unicode,则转换utf-8输出,否则直接输出addr
return formataddr(( \
Header(name, 'utf-8').encode(), \
addr.encode("utf-8") if isinstance(addr, str) else addr))
#设置email信息
#邮件内容设置
message = MIMEText(text_message,'HTML','utf-8')
# 邮件主题
message['Subject'] = self._subject
# 发送方信息
message['From'] = (u'Message from Linux <%s>'%self.__fromaddr)
# 接受方信息
message['To'] = self._recevier_list
#登录并发送邮件
try:
smtpObj = smtplib.SMTP()
#连接到服务器
smtpObj.connect('smtp.163.com', 25)
#登录到服务器
smtpObj.login(self.__fromaddr,self.__password)
#发送
smtpObj.sendmail(self.__fromaddr,self._recevier_list,message.as_string())
#退出
smtpObj.quit()
print('success')
except smtplib.SMTPException as e:
print('error',e)
#打印错误
if __name__ == '__main__':
text_message='<p1>Model train completed!</p1><br><p>zhangsaisai</p><p>Auc...</p>'
Mail = MailSender()
Mail.send(text_message)