ホームページ  >  記事  >  バックエンド開発  >  Pythonでメール送受信機能を簡単実装

Pythonでメール送受信機能を簡単実装

小云云
小云云オリジナル
2018-05-12 11:16:175645ブラウズ

この記事では主に、Python でメールを送受信する機能を簡単に実装する方法を説明します。重要な知識は、Python の組み込みモジュールである Poplib と stmplib の使用です。一定の参考価値がありますので、興味のある方は参考にしていただければ幸いです。

1. 準備

まず、Sina Mailbox を使用して次の設定を行う必要があります:

Sina Mailbox ホームページの右上隅にある設定を見つけます。 >その他の設定 を選択し、左側の [Client/pop/imap/smtp] を選択します:

最後に、Pop3/smtp サービスのサービス ステータスをオンにします:

2。 mail

まず、poplib ログイン メールボックスとダウンロード メール用のインターフェイスをいくつか紹介します:

self.popHost = 'pop.sina.com' 
self.smtpHost = 'smtp.sina.com' 
self.port = 25 
self.userName = 'xxxxxx@sina.com' 
self.passWord = 'xxxxxx' 
self.bossMail = 'xxxxxx@qq.com'

ログイン メールボックス、pop、smtp サーバー、およびポートを指定するには、上記のような定数が必要です。 Poplib の POP3_SSL インターフェイスを呼び出して、メールボックスにログインします。

# 登录邮箱 
def login(self): 
 try: 
  self.mailLink = poplib.POP3_SSL(self.popHost) 
  self.mailLink.set_debuglevel(0) 
  self.mailLink.user(self.userName) 
  self.mailLink.pass_(self.passWord) 
  self.mailLink.list() 
  print u'login success!' 
 except Exception as e: 
  print u'login fail! ' + str(e) 
  quit()

メールにログインするときは、当然のことですが、ユーザー名とパスワードを入力する必要があります。上記のコードに示されているように、使い方は非常に簡単です。
メールボックスに正常にログインしたら、リストメソッドを使用してメールボックスのメール情報を取得できます。リスト メソッドの定義が表示されます:

def list(self, which=None): 
 """Request listing, return result. 
 
 Result without a message number argument is in form 
 ['response', ['mesg_num octets', ...], octets]. 
 
 Result when a message number argument is given is a 
 single response: the "scan listing" for that message. 
 """ 
 if which is not None: 
  return self._shortcmd('LIST %s' % which) 
 return self._longcmd('LIST')

リスト メソッドのコメントが表示されます。中国語の意味は、リスト メソッドにはデフォルトのパラメータがあり、呼び出し元がパラメータを指定しない場合のデフォルト値は None であることを意味します。 、メソッドはすべての電子メールの情報をリストします。戻り形式は [response, ['msg_number, octets', ...], octets] です。response は応答結果、msg_number は電子メール番号、octets は8ビットのバイト単位。具体的な例を見てみましょう:
('+OK ', ['1 2424', '2 2422'], 16)
これは、list() メソッドを呼び出した後の戻り結果です。明らかに、これはタプルです。最初の値 sahib は、要求が成功したことを示す '+OK' で応答します。2 番目の値は、電子メール情報を格納する配列です。たとえば、「1 2424」の 1 は、電子メール番号が 1 であることを意味します。
poplib を使用してメールをダウンロードする方法を見てみましょう。

# 获取邮件 
def retrMail(self): 
 try: 
  mail_list = self.mailLink.list()[1] 
  if len(mail_list) == 0: 
   return None 
  mail_info = mail_list[0].split(' ') 
  number = mail_info[0] 
  mail = self.mailLink.retr(number)[1] 
  self.mailLink.dele(number) 
 
  subject = u'' 
  sender = u'' 
  for i in range(0, len(mail)): 
   if mail[i].startswith('Subject'): 
    subject = mail[i][9:] 
   if mail[i].startswith('X-Sender'): 
    sender = mail[i][10:] 
  content = {'subject': subject, 'sender': sender} 
  return content 
 except Exception as e: 
  print str(e) 
  return None

poplib のメール内容を取得するインターフェースは retr メソッドです。パラメータが 1 つ必要で、それは取得する電子メール番号です。以下は retr メソッドの定義です:

def retr(self, which): 
 """Retrieve whole message number 'which'. 
 
 Result is in form ['response', ['line', ...], octets]. 
 """ 
 return self._longcmd('RETR %s' % which)

コメントを見ると、retr メソッドは指定された番号を持つメールの内容全体を取得でき、その戻り形式は [response, ['line', ...], オクテット], 返されたタプルの 2 番目の要素にメールの内容が格納されており、その格納形式が配列であることがわかります。この配列がどのようなものかをテストしてみましょう。

この配列の保存形式は dict に似ていることがわかります。したがって、これに基づいて興味のあるものを見つけることができます。たとえば、サンプル コードが電子メールの件名と送信者を検索するものである場合、上記のコードのように記述できます。もちろん、通常のマッチングを使用することもできます~~~ テスト結果は次のとおりです:

まあ... 自分で試してみることもできます。

3. 電子メールを送信する SMTP

POP と同様に、SMTP を使用する前にいくつかの必要な定数を指定する必要があります:

self.mail_box = smtplib.SMTP(self.smtpHost, self.port) 
self.mail_box.login(self.userName, self.passWord)

上記は、SMTP を使用してメールボックスにログインするためのコードです。ポップスに似ています。 smtp を使用して電子メールを送信するコードを以下に示します。Python がいかにシンプルで美しいかがわかります。

# 发送邮件 
def sendMsg(self, mail_body='Success!'): 
 try: 
  msg = MIMEText(mail_body, 'plain', 'utf-8') 
  msg['Subject'] = mail_body 
  msg['from'] = self.userName 
  self.mail_box.sendmail(self.userName, self.bossMail, msg.as_string()) 
  print u'send mail success!' 
 except Exception as e: 
  print u'send mail fail! ' + str(e)

これはPythonでsmtpを使用してメールを送信するためのコードです!とても簡単です!とても便利!とても分かりやすいです!ここでの主な方法は sendmail で、送信者、受信者、電子メールの内容を指定するだけです。 MIMEText もあります。その定義は次のようになります。

class MIMEText(MIMENonMultipart): 
 """Class for generating text/* type MIME documents.""" 
 
 def __init__(self, _text, _subtype='plain', _charset='us-ascii'): 
  """Create a text/* type MIME document. 
 
  _text is the string for this message object. 
 
  _subtype is the MIME sub content type, defaulting to "plain". 
 
  _charset is the character set parameter added to the Content-Type 
  header. This defaults to "us-ascii". Note that as a side-effect, the 
  Content-Transfer-Encoding header will also be set. 
  """ 
  MIMENonMultipart.__init__(self, 'text', _subtype, 
         **{'charset': _charset}) 
  self.set_payload(_text, _charset)

コメントを参照してください~~~ これは、指定されたコンテンツと指定されたエンコーディングを持つ MIME ドキュメントを生成するための単なるメソッドです。さて、sendmail メソッドを見てみましょう~~~

def sendmail(self, from_addr, to_addrs, msg, mail_options=[], 
    rcpt_options=[]): 
 """This command performs an entire mail transaction. 
 
 The arguments are: 
  - from_addr : The address sending this mail. 
  - to_addrs  : A list of addresses to send this mail to. A bare 
       string will be treated as a list with 1 address. 
  - msg   : The message to send. 
  - mail_options : List of ESMTP options (such as 8bitmime) for the 
       mail command. 
  - rcpt_options : List of ESMTP options (such as DSN commands) for 
       all the rcpt commands.

うーん... smtp を使用してメールを送信する方法は以上です。

4. ソースコードとテスト

# -*- coding:utf-8 -*- 
from email.mime.text import MIMEText 
import poplib 
import smtplib 
 
 
class MailManager(object): 
 
 def __init__(self): 
  self.popHost = 'pop.sina.com' 
  self.smtpHost = 'smtp.sina.com' 
  self.port = 25 
  self.userName = 'xxxxxx@sina.com' 
  self.passWord = 'xxxxxx' 
  self.bossMail = 'xxxxxx@qq.com' 
  self.login() 
  self.configMailBox() 
 
 # 登录邮箱 
 def login(self): 
  try: 
   self.mailLink = poplib.POP3_SSL(self.popHost) 
   self.mailLink.set_debuglevel(0) 
   self.mailLink.user(self.userName) 
   self.mailLink.pass_(self.passWord) 
   self.mailLink.list() 
   print u'login success!' 
  except Exception as e: 
   print u'login fail! ' + str(e) 
   quit() 
 
 # 获取邮件 
 def retrMail(self): 
  try: 
   mail_list = self.mailLink.list()[1] 
   if len(mail_list) == 0: 
    return None 
   mail_info = mail_list[0].split(' ') 
   number = mail_info[0] 
   mail = self.mailLink.retr(number)[1] 
   self.mailLink.dele(number) 
 
   subject = u'' 
   sender = u'' 
   for i in range(0, len(mail)): 
    if mail[i].startswith('Subject'): 
     subject = mail[i][9:] 
    if mail[i].startswith('X-Sender'): 
     sender = mail[i][10:] 
   content = {'subject': subject, 'sender': sender} 
   return content 
  except Exception as e: 
   print str(e) 
   return None 
 
 def configMailBox(self): 
  try: 
   self.mail_box = smtplib.SMTP(self.smtpHost, self.port) 
   self.mail_box.login(self.userName, self.passWord) 
   print u'config mailbox success!' 
  except Exception as e: 
   print u'config mailbox fail! ' + str(e) 
   quit() 
 
 # 发送邮件 
 def sendMsg(self, mail_body='Success!'): 
  try: 
   msg = MIMEText(mail_body, 'plain', 'utf-8') 
   msg['Subject'] = mail_body 
   msg['from'] = self.userName 
   self.mail_box.sendmail(self.userName, self.bossMail, msg.as_string()) 
   print u'send mail success!' 
  except Exception as e: 
   print u'send mail fail! ' + str(e) 
 
if __name__ == '__main__': 
 mailManager = MailManager() 
 mail = mailManager.retrMail() 
 if mail != None: 
  print mail 
  mailManager.sendMsg()

上記のコードは、まずメールボックスにログインし、最初のメールを取得して削除し、次にメールの件名と送信者を取得して印刷し、最後に送信します。成功したメール 別の BossMail メール アドレスを指定します。

テスト結果は次のとおりです:

上記のコードをコピーして自分で試してみてください

関連する推奨事項:

電子メールを送受信するための Python

thinkphp は 163 を実装します。 QQメールボックス送受信メールメソッド_PHP

phpでメールを送受信します

以上がPythonでメール送受信機能を簡単実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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