Maison >développement back-end >Tutoriel Python >Introduction détaillée à l'envoi d'e-mails via python SMTP (avec code)
Cet article vous apporte une introduction détaillée à SMTP pour l'envoi d'e-mails en Python (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Comment utiliser Python pour envoyer le rapport de test généré en pièce jointe à un e-mail ?
Smtplib de Python fournit un moyen très pratique d'envoyer des e-mails, qui encapsule simplement le protocole SMTP.
Python prend en charge SMTP avec deux modules : smtplib et email. Parmi eux, le courrier électronique est responsable de la construction des courriers électroniques et smtplib est responsable de l'envoi des courriers électroniques.
Comprenons l'idée de base de l'envoi d'une pièce jointe d'un type MIME inconnu en Python :
0、前提:导入邮件发送模块 from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import smtplib 1、构造MIMEMultipart对象作为根容器 2、构造MIMEText对象作为邮件显示内容并附加到根容器 a、读入文件内容并格式化 b、设置附件头 3、设置根容器属性 4、得到格式化后的完整文本 5、用smtp发送邮件 6、封装成sendEmail类。
Parce que nous avons déjà écrit comment lire le fichier de configuration .ini, donc dans cette partie, quelques éléments pour l'envoi les emails sont placés dans le fichier de configuration. Le fichier de configuration Comme suit :
1、服务器。以QQ邮箱举例,则为smtp.qq.com 2、端口号。有465和587,请使用587 3、发送者。 4、密码。密码总不能直接写在文件里吧?哈哈,这里需要使用qq邮箱获取授权码。 5、收件人。(可能还不止一个) 6、发送邮件的主题subject。 7、邮件文本内容。 8、附件。
Le script de lecture du fichier de configuration correspondant est : (readConfig.py part)
3. Partie e-mail
import os import configparser # config cur_path = os.path.dirname(os.path.relpath(__file__)) configPath = os.path.join(cur_path,'config.ini') conf = configparser.ConfigParser() conf.read(configPath) def get_smtpServer(smtpServer): smtp_server = conf.get('email',smtpServer) return smtp_server # ......
Comment définir l'objet et l'expéditeur de l'email ?
# 构建根容器 msg = MIMEMultipart() # 邮件主题、发送人、收件人、内容,此部分可以来自配置文件,也可以直接填入 msg['Subject'] = self.mail_subject # u'自动化测试报告' msg['from'] = self.mail_sender msg['to'] = self.mail_pwd
# 邮件正文部分body,1、可以用HTML自己自定义body内容;2、读取其他文件的内容为body # body = "您好,<p>这里是使用Python登录邮箱,并发送附件的测试" with open(reportFile,'r',encoding='UTF-8') as f: body = f.read() msg.attach(MIMEText(_text=body, _subtype='html', _charset='utf-8')) # _charset 是指Content_type的类型</p>
# 添加附件 attachment = MIMEText(_text=open(reportFile, 'rb').read(), _subtype='base64',_charset= 'utf-8') attachment['Content-Type'] = 'application/octet-stream' attachment['Content-Disposition'] = 'attachment;filename = "result.html"' msg.attach(attachment)
Ajoutez une phrase
try: smtp = smtplib.SMTP_SSL(host=self.mail_smtpserver, port=self.mail_port) # 继承自SMTP except: smtp = smtplib.SMTP() smtp.connect(self.mail_smtpserver, self.mail_port) # smtp.set_debuglevel(1) # 创建安全连接,加密SMTP smtp.starttls() # Puts the connection to the SMTP server into TLS mode. # 用户名和密码 smtp.login(user=self.mail_sender, password=self.mail_pwd) # 函数:sendmail(self, from_addr, to_addrs, msg, mail_options=[],rcpt_options=[]): smtp.sendmail(self.mail_sender, self.mail_receiverList, msg.as_string()) smtp.quit()Après avoir créé l'objet SMTP, appelez immédiatement la méthode
. smtp.starttls()
En fait, tout le module d’envoi d’email est complété. starttls()
4. Problèmes
Erreur de lancement : smtplib.SMTPAuthenticationError : (535, b'Error : xc7xebxcaxb9xd3xc3xcaxdaxc8xa8xc2xebxb5xc7xc2xbcxa1xa3xcfxeaxc7xe9xc7xebxbfxb4 : http://service.mail.qq.com/cg...')
Solution : Cliquer sur le dernier lien est en fait dû au problème du code d'autorisation
L'erreur persiste après remplacement du code d'autorisation , 535
Solution : Remplacer le port. Parce qu'il existe deux ports de protocole SSL pour la boîte aux lettres qq : 465/587.
Erreur signalée : smtplib.SMTPAuthenticationError : (530, b'Doit d'abord émettre une commande STARTTLS.')
Solution : Avant de vous connecter(), ajoutez : smtp.starttls()
5. Codez tout
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!