Python SMTP を介した電子メール送信の詳細な紹介 (コード付き)

不言
リリース: 2018-10-09 15:39:31
転載
2683 人が閲覧しました

この記事では、Python で電子メールを送信するための SMTP について詳しく説明します (コード付き)。一定の参考価値があります。必要な友人は参照してください。お役に立てれば幸いです。

Python を使用して、生成されたテスト レポートを電子メールの添付ファイルとして送信するにはどうすればよいですか?

1. 概要

SMTP (Simple Mail Transfer Protocol) は、シンプルなメール転送プロトコルであり、送信元アドレスから宛先アドレスにメールを送信するための一連のルールです。メールの転送方法を制御するためのものです。

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类。
ログイン後にコピー

2. 電子メール送信要素

同時に私たちのことを考えてください 電子メールを送信するためのいくつかの要素:

1、服务器。以QQ邮箱举例,则为smtp.qq.com
2、端口号。有465和587,请使用587
3、发送者。
4、密码。密码总不能直接写在文件里吧?哈哈,这里需要使用qq邮箱获取授权码。
5、收件人。(可能还不止一个)
6、发送邮件的主题subject。
7、邮件文本内容。
8、附件。
ログイン後にコピー

以前に .ini 設定ファイルの読み取り方法を書いたので、このセクションでは、電子メールを送信するためのいくつかの要素が設定ファイルに配置されます構成ファイルは次のとおりです:

Python SMTP を介した電子メール送信の詳細な紹介 (コード付き)

構成ファイルを読み取るための対応するスクリプトは次のとおりです: (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() メソッドを呼び出します。
実際には、電子メール送信モジュール全体が完了しました。

4. 問題

このプロセス中にいくつかの問題が発生したので、ここに投稿して皆さんと共有したいと思います。

エラー 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()

を追加します。 5. すべてコードを記述します

以下にファイル全体を貼り付けます このファイルは他のファイルに依存しているので参考程度ですが、方法は同じです。

rree

以上がPython SMTP を介した電子メール送信の詳細な紹介 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート