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='plain',_charset='gb2312') msg['Subject'] = sub msg['From'] = me msg['To'] = ";".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__ == '__main__': if send_mail(mailto_list,"hello","hello world!"): print "发送成功" else: print "发送失败"
与text邮件不同之处就是将将MIMEText中_subtype设置为html。具体代码如下:(python2.6下实现) 3、发送带附件的邮件 发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。 4、利用MIMEimage发送图片 利用MIMEimage发送图片,原本是想图片能够在正文中显示,可是代码运行后发现,依然是以附件形式发送的,希望有高手能够指点一下,如何可以发送在正文中显示的图片的邮件,就是图片是附件中存在,但同时能显示在正文中,具体形式如下图。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。 更多详解python发送各类邮件的主要方法相关文章请关注PHP中文网!# -*- coding: utf-8 -*-
'''
发送html文本邮件
'''
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='html',_charset='gb2312') #创建一个实例,这里设置为html格式邮件
msg['Subject'] = sub #设置主题
msg['From'] = me
msg['To'] = ";".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__ == '__main__':
if send_mail(mailto_list,"hello","<a href='http://www.cnblogs.com/xiaowuyi'>小五义</a>"):
print "发送成功"
else:
print "发送失败"
# -*- coding: cp936 -*-
'''
发送带附件邮件
'''
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
#创建一个带附件的实例
msg = MIMEMultipart()
#构造附件1
att1 = MIMEText(open('d:\\123.rar', 'rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="123.doc"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字
msg.attach(att1)
#构造附件2
att2 = MIMEText(open('d:\\123.txt', 'rb').read(), 'base64', 'gb2312')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="123.txt"'
msg.attach(att2)
#加邮件头
msg['to'] = 'YYY@YYY.com'
msg['from'] = 'XXX@XXX.com'
msg['subject'] = 'hello world'
#发送邮件
try:
server = smtplib.SMTP()
server.connect('smtp.XXX.com')
server.login('XXX','XXXXX')#XXX为用户名,XXXXX为密码
server.sendmail(msg['from'], msg['to'],msg.as_string())
server.quit()
print '发送成功'
except Exception, e:
print str(e)
# -*- 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['From'] = "XXX@XXX.com"
msg['To'] = "YYY@YYY.com"
msg['Subject'] = "hello world"
txt = MIMEText("这是中文的邮件内容哦",'plain','gb2312')
msg.attach(txt)
file1 = "C:\\hello.jpg"
image = MIMEImage(open(file1,'rb').read())
image.add_header('Content-ID','<image1>')
msg.attach(image)
server = smtplib.SMTP()
server.connect('smtp.XXX.com')
server.login('XXX','XXXXXX')
server.sendmail(msg['From'],msg['To'],msg.as_string())
server.quit()
if __name__ == "__main__":
AutoSendMail()