この記事では、Python で電子メールを送信するための SMTP について詳しく説明します (コード付き)。一定の参考価値があります。必要な友人は参照してください。お役に立てれば幸いです。
Python を使用して、生成されたテスト レポートを電子メールの添付ファイルとして送信するにはどうすればよいですか?
Python の smtplib は、SMTP プロトコルをカプセル化するだけで、電子メールを送信するための非常に便利な方法を提供します。
Python は、smtplib と email の 2 つのモジュールで SMTP をサポートします。このうち、email はメールの構築を担当し、smtplib はメールの送信を担当します。
Python で不明な MIME タイプの添付ファイルを送信する基本的な考え方を理解しましょう:
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类。
同時に私たちのことを考えてください 電子メールを送信するためのいくつかの要素:
1、服务器。以QQ邮箱举例,则为smtp.qq.com 2、端口号。有465和587,请使用587 3、发送者。 4、密码。密码总不能直接写在文件里吧?哈哈,这里需要使用qq邮箱获取授权码。 5、收件人。(可能还不止一个) 6、发送邮件的主题subject。 7、邮件文本内容。 8、附件。
以前に .ini 設定ファイルの読み取り方法を書いたので、このセクションでは、電子メールを送信するためのいくつかの要素が設定ファイルに配置されます構成ファイルは次のとおりです:
構成ファイルを読み取るための対応するスクリプトは次のとおりです: (readConfig.py 部分)
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 # ......
MIMEMultipart() 電子メール ルート コンテナ オブジェクトを構築した後、ルート コンテナを使用して電子メールのさまざまな要素を定義する必要があります。電子メールの件名、送信者、受信者、電子メールの本文、電子メールの添付ファイルなど。
# 构建根容器 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)
送信には、サーバー接続の取得、メールボックスへのログイン、電子メールの送信、終了の 4 つの手順を実行します。
おおよそ次のとおりです:
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()
文 smtp.starttls()
を追加しました。この文は、電子メールが安全に送信され、盗聴できないことを保証するために SMTP セッションを暗号化するために使用されます。
SMTP オブジェクトを作成したら、すぐに starttls()
メソッドを呼び出します。
実際には、電子メール送信モジュール全体が完了しました。
このプロセス中にいくつかの問題が発生したので、ここに投稿して皆さんと共有したいと思います。
エラー 535
をスローします
スローエラー: smtplib.SMTPAuthenticationError: (535, b'Error:
xc7xebxcaxb9xd3xc3xcaxdaxc8xa8xc2xebxb5xc7xc2xbcxa1xa3xcfxeaxc7xe9xc7xebxbfxb4:
http://service.mail.qq.com/cg...')
解決策: 最後のリンクをクリックします。実際には認証コードの問題が原因です。
置換後も引き続きエラーを報告してください。認証コード 535
解決策: ポートを交換します。 qq メールボックスには 2 つの ssl プロトコル ポート (465/587) があるためです。
エラー レポート: smtplib.SMTPAuthenticationError: (530, b'最初に STARTTLS コマンドを発行する必要があります。')
解決策:login() の前に、smtp.starttls()
以下にファイル全体を貼り付けます このファイルは他のファイルに依存しているので参考程度ですが、方法は同じです。
rree以上がPython SMTP を介した電子メール送信の詳細な紹介 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。