ホームページ バックエンド開発 Python チュートリアル Pythonで各種メールを送信する主な方法を詳しく解説

Pythonで各種メールを送信する主な方法を詳しく解説

Feb 23, 2017 pm 04:38 PM

Pythonのメールモジュールを使うとメールの処理が簡単になります この記事では主にPythonで様々な種類のメールを送信する方法を紹介しますので、興味のある方はご覧ください。

Python のメール モジュールを使用すると、メールの処理が簡単になります。今日は、メールを送信する具体的な方法を学ぶことに焦点を当てて、私自身の経験をここに書き留め、専門家にアドバイスを求めます。

1. 関連モジュールの紹介

メールの送信には主に smtplib と email の 2 つのモジュールを使用します。 2 つのモジュールについて簡単に説明します。

1. smtplib モジュール

smtplib.SMTP( [host [, port[, local_hostname[, timeout]]]])

SMTP サーバーとの接続を表す SMTP クラス コンストラクター。この接続を通じて、SMTP サーバーに指示を送信し、関連する操作 (ログインなど) を実行できます。 、 メールを送る)。すべてのパラメータはオプションです。

host: SMTP サーバーのホスト名

port: SMTP サービス ポート、デフォルトは 25; SMTP オブジェクトの作成時にこれら 2 つのパラメーターが指定された場合、サーバーに接続するための初期化中に connect メソッドが自動的に呼び出されます。

smtplibモジュールにはSMTP_SSLクラスとLMTPクラスも提供されており、それらの動作は基本的にSMTPと同じです。

smtplib.SMTPが提供するメソッド:

SMTP.set_debuglevel(level): デバッグモードかどうかを設定します。デフォルトは False で、非デバッグ モードです。これは、デバッグ情報が出力されないことを意味します。

SMTP.connect([host[, port]]): 指定された SMTP サーバーに接続します。パラメータはそれぞれ smpt ホストとポートを表します。注: ホスト パラメータでポート番号を指定することもできるため (例: smpt.yeah.net:25)、ポート パラメータを指定する必要はありません。

SMTP.docmd(cmd[, argstring]): SMTP サーバーに指示を送信します。オプションのパラメータ argstring は、命令のパラメータを表します。

SMTP.helo([ホスト名]): 「helo」コマンドを使用して、サーバーに対して ID を確認します。これは、SMTP サーバーに「私が誰であるか」を伝えることと同じです。

SMTP.has_extn(name): 指定された名前がサーバーのメーリング リストに存在するかどうかを確認します。セキュリティ上の理由から、SMTP サーバーはこのコマンドをブロックすることがよくあります。

SMTP.verify(address): 指定された電子メール アドレスがサーバーに存在するかどうかを判断します。セキュリティ上の理由から、SMTP サーバーはこのコマンドをブロックすることがよくあります。

SMTP.login(ユーザー、パスワード): SMTP サーバーにログインします。現在、ほぼすべての SMTP サーバーは、電子メールの送信を許可する前にユーザー情報が正当であることを検証する必要があります。

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]): メールを送信します。ここで、3 番目のパラメータ msg が電子メールを表す文字列であることに注意してください。一般に、メールはタイトル、送信者、受信者、メールの内容、添付ファイルなどで構成されていることがわかります。メールを送信するときは、メッセージの形式に注意してください。この形式は、smtp プロトコルで定義されている形式です。

SMTP.quit(): SMTP サーバーから切断します。これは、「quit」コマンドを送信するのと同じです。 (smtp.close() は多くのプログラムで使用されています。quit と quit の違いについてグーグルで調べましたが、答えが見つかりませんでした。)

2. Email モジュール

emial モジュールは電子メール メッセージを処理するために使用されます。これには、RFC 2822 に基づく MIME およびその他のメッセージ ドキュメントが含まれます。これらのモジュールを使用して電子メールのコンテンツを定義するのは非常に簡単です。これに含まれるクラスは次のとおりです (詳細な紹介は http://www.php.cn/ でご覧いただけます):

class email.mime.base.MIMEBase(_maintype, _subtype, **_params): これはベースですMIME の種類。通常、使用するときにインスタンスを作成する必要はありません。ここで、_maintype はテキストや画像などのコンテンツ タイプです。 _subtype は、プレーンや gif などのコンテンツのマイナー タイプです。 **_params は、Message.add_header() に直接渡される辞書です。

class email.mime.multipart.MIMEMultipart([_subtype[, border[, _subparts[, _params]]]]: MIMEBase のサブクラス、複数の MIME オブジェクトのコレクション。_subtype のデフォルト値は混合です。境界は MIMEMultipart境界、デフォルトの境界は数えられます。

class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]]): MIMEMultipart

class audio.MIMEAudio のサブクラス。 (_audiodata[, _subtype[, _encoder[, **_params]]]): MIME オーディオ オブジェクト

class email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]] ): MIMEバイナリ ファイル オブジェクト。

class email.mime.message.MIMEMessage(_msg[, _subtype]): 特定のメッセージ インスタンス。使用方法は次のとおりです:

msg=mail.Message.Message()  #一个实例 
msg['to']='XXX@XXX.com'   #发送到哪里 
msg['from']='YYY@YYYY.com'    #自己的邮件地址 
msg['date']='2012-3-16'      #时间日期 
msg['subject']='hello world'  #邮件主题
ログイン後にコピー

class email.mime.text.MIMEText ( _text[, _subtype[, _charset]]): MIME テキスト オブジェクト。_text は電子メールのコンテンツ、_subtype 電子メール タイプは text/plain (通常のテキスト電子メール)、html/plain (HTML 電子メール)、_charset エンコーディングです。 gb2312 などです

2. いくつかのタイプのメールの具体的な実装コード

1. 通常のテキストメール

を実装するには、まず MIMEText の _subtype を plain に設定することが重要です。 smtplib と mimetext。smtplib.smtp インスタンスを作成し、電子メール smtp サーバーに接続し、ログイン後に送信します。具体的なコードは次のとおりです: (python2.6 で実装)

# -*- coding: UTF-8 -*-
'''
发送txt文本邮件
'''
import smtplib 
from email.mime.text import MIMEText 
mailto_list=[YYY@YYY.com] 
mail_host="smtp.XXX.com" #设置服务器
mail_user="XXXX"  #用户名
mail_pass="XXXXXX"  #口令 
mail_postfix="XXX.com" #发件箱的后缀
 
def send_mail(to_list,sub,content): 
  me="hello"+"<"+mail_user+"@"+mail_postfix+">" 
  msg = MIMEText(content,_subtype=&#39;plain&#39;,_charset=&#39;gb2312&#39;) 
  msg[&#39;Subject&#39;] = sub 
  msg[&#39;From&#39;] = me 
  msg[&#39;To&#39;] = ";".join(to_list) 
  try: 
    server = smtplib.SMTP() 
    server.connect(mail_host) 
    server.login(mail_user,mail_pass) 
    server.sendmail(me, to_list, msg.as_string()) 
    server.close() 
    return True 
  except Exception, e: 
    print str(e) 
    return False 
if __name__ == &#39;__main__&#39;: 
  if send_mail(mailto_list,"hello","hello world!"): 
    print "发送成功" 
  else: 
    print "发送失败"
ログイン後にコピー

2. HTMLメール

与text邮件不同之处就是将将MIMEText中_subtype设置为html。具体代码如下:(python2.6下实现)

# -*- coding: utf-8 -*-
&#39;&#39;&#39;
发送html文本邮件
&#39;&#39;&#39;
import smtplib 
from email.mime.text import MIMEText 
mailto_list=["YYY@YYY.com"] 
mail_host="smtp.XXX.com" #设置服务器
mail_user="XXX"  #用户名
mail_pass="XXXX"  #口令 
mail_postfix="XXX.com" #发件箱的后缀
 
def send_mail(to_list,sub,content): #to_list:收件人;sub:主题;content:邮件内容
  me="hello"+"<"+mail_user+"@"+mail_postfix+">"  #这里的hello可以任意设置,收到信后,将按照设置显示
  msg = MIMEText(content,_subtype=&#39;html&#39;,_charset=&#39;gb2312&#39;)  #创建一个实例,这里设置为html格式邮件
  msg[&#39;Subject&#39;] = sub  #设置主题
  msg[&#39;From&#39;] = me 
  msg[&#39;To&#39;] = ";".join(to_list) 
  try: 
    s = smtplib.SMTP() 
    s.connect(mail_host) #连接smtp服务器
    s.login(mail_user,mail_pass) #登陆服务器
    s.sendmail(me, to_list, msg.as_string()) #发送邮件
    s.close() 
    return True 
  except Exception, e: 
    print str(e) 
    return False 
if __name__ == &#39;__main__&#39;: 
  if send_mail(mailto_list,"hello","<a href=&#39;http://www.cnblogs.com/xiaowuyi&#39;>小五义</a>"): 
    print "发送成功" 
  else: 
    print "发送失败"
ログイン後にコピー

3、发送带附件的邮件

发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

# -*- coding: cp936 -*-
&#39;&#39;&#39;
发送带附件邮件
&#39;&#39;&#39;

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib

#创建一个带附件的实例
msg = MIMEMultipart()

#构造附件1
att1 = MIMEText(open(&#39;d:\\123.rar&#39;, &#39;rb&#39;).read(), &#39;base64&#39;, &#39;gb2312&#39;)
att1["Content-Type"] = &#39;application/octet-stream&#39;
att1["Content-Disposition"] = &#39;attachment; filename="123.doc"&#39;#这里的filename可以任意写,写什么名字,邮件中显示什么名字
msg.attach(att1)

#构造附件2
att2 = MIMEText(open(&#39;d:\\123.txt&#39;, &#39;rb&#39;).read(), &#39;base64&#39;, &#39;gb2312&#39;)
att2["Content-Type"] = &#39;application/octet-stream&#39;
att2["Content-Disposition"] = &#39;attachment; filename="123.txt"&#39;
msg.attach(att2)

#加邮件头
msg[&#39;to&#39;] = &#39;YYY@YYY.com&#39;
msg[&#39;from&#39;] = &#39;XXX@XXX.com&#39;
msg[&#39;subject&#39;] = &#39;hello world&#39;
#发送邮件
try:
  server = smtplib.SMTP()
  server.connect(&#39;smtp.XXX.com&#39;)
  server.login(&#39;XXX&#39;,&#39;XXXXX&#39;)#XXX为用户名,XXXXX为密码
  server.sendmail(msg[&#39;from&#39;], msg[&#39;to&#39;],msg.as_string())
  server.quit()
  print &#39;发送成功&#39;
except Exception, e: 
  print str(e)
ログイン後にコピー

4、利用MIMEimage发送图片

# -*- coding: cp936 -*-
import smtplib
import mimetypes
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

def AutoSendMail():
  msg = MIMEMultipart()
  msg[&#39;From&#39;] = "XXX@XXX.com"
  msg[&#39;To&#39;] = "YYY@YYY.com"
  msg[&#39;Subject&#39;] = "hello world"


  txt = MIMEText("这是中文的邮件内容哦",&#39;plain&#39;,&#39;gb2312&#39;)   
  msg.attach(txt)
  

  file1 = "C:\\hello.jpg"
  image = MIMEImage(open(file1,&#39;rb&#39;).read())
  image.add_header(&#39;Content-ID&#39;,&#39;<image1>&#39;)
  msg.attach(image)
  
  
  server = smtplib.SMTP()
  server.connect(&#39;smtp.XXX.com&#39;)
  server.login(&#39;XXX&#39;,&#39;XXXXXX&#39;)
  server.sendmail(msg[&#39;From&#39;],msg[&#39;To&#39;],msg.as_string())
  server.quit()
  
if __name__ == "__main__":
  AutoSendMail()
ログイン後にコピー

利用MIMEimage发送图片,原本是想图片能够在正文中显示,可是代码运行后发现,依然是以附件形式发送的,希望有高手能够指点一下,如何可以发送在正文中显示的图片的邮件,就是图片是附件中存在,但同时能显示在正文中,具体形式如下图。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。

更多详解python发送各类邮件的主要方法相关文章请关注PHP中文网!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

正規表現とは何ですか? 正規表現とは何ですか? Mar 20, 2025 pm 06:25 PM

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

See all articles