Heim  >  Artikel  >  Backend-Entwicklung  >  Einfache Implementierung der Funktion zum Senden und Empfangen von E-Mails in Python

Einfache Implementierung der Funktion zum Senden und Empfangen von E-Mails in Python

小云云
小云云Original
2018-05-12 11:16:175650Durchsuche

In diesem Artikel erfahren Sie hauptsächlich, wie Sie die Funktion zum Senden und Empfangen von E-Mails in Python einfach implementieren. Die wichtigsten Wissenspunkte sind die Verwendung der in Python integrierten Module Poplib und Stmplib. Es hat einen gewissen Referenzwert. Ich hoffe, es kann jedem helfen.

1. Vorbereitung

Zuerst benötigen wir eine Test-E-Mail und nehmen folgende Einstellungen vor:

Suchen Sie Einstellungen -> Weitere Einstellungen in der oberen rechten Ecke der Sina Mail-Startseite und wählen Sie dann links „Client/pop/imap/smtp“ aus:

Schließlich aktivieren Sie den Dienststatus des Pop3/SMTP-Dienstes:

2. Poplib empfängt E-Mails

Führen Sie zunächst einige Schnittstellen für das Poplib-Anmeldepostfach und das Herunterladen von E-Mails ein:

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'

Wir benötigen einige Konstanten wie oben, um das Anmeldepostfach und Pop, den SMTP-Server und den Port anzugeben. Wir rufen die POP3_SSL-Schnittstelle von Poplib auf, um uns beim Postfach anzumelden.

# 登录邮箱 
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()

Bei der Anmeldung per E-Mail müssen wir natürlich einen Benutzernamen und ein Passwort angeben. Wie im obigen Code gezeigt, ist die Verwendung sehr einfach.
Nachdem wir uns erfolgreich beim Postfach angemeldet haben, können wir die Listenmethode verwenden, um die E-Mail-Informationen des Postfachs abzurufen. Wir sehen die Definition der Listenmethode:

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')

Wir sehen den Kommentar der Listenmethode, dessen chinesische Bedeutung darin besteht, dass die Listenmethode beim Aufrufen einen Standardparameter hat, dessen Standardwert None ist Gibt es keinen Parameter an, listet diese Methode die Informationen aller E-Mails auf und ihr Rückgabeformular ist [Antwort, ['Nachrichtennummer, Oktette', ...], Oktette], wobei Antwort das Antwortergebnis und Nachrichtennummer die E-Mail ist Zahl und Oktette sind 8-Bit-Byte-Einheiten. Schauen wir uns ein konkretes Beispiel an:
('+OK ', ['1 2424', '2 2422'], 16)
Dies ist das Rückgabeergebnis nach dem Aufruf der list()-Methode. Offensichtlich handelt es sich hierbei um ein Tupel. Der erste Wert antwortet mit „+OK“, was anzeigt, dass die Anfrage erfolgreich ist. Der zweite Wert ist ein Array, das die E-Mail-Informationen speichert. Beispielsweise bedeutet 1 in „1 2424“, dass die E-Mail-Nummer 1 ist.
Sehen wir uns an, wie man Poplib zum Herunterladen von E-Mails verwendet.

# 获取邮件 
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

Poplibs Schnittstelle zum Abrufen von E-Mail-Inhalten ist die Retr-Methode. Es ist ein Parameter erforderlich, nämlich die zu erhaltende E-Mail-Nummer. Das Folgende ist die Definition der retr-Methode:

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

Wir sehen die Kommentare und wissen, dass die retr-Methode den gesamten Inhalt der E-Mail mit der angegebenen Nummer abrufen kann und ihr Rückgabeformular [Antwort, ['line', .. .], octets], es ist ersichtlich, dass der Inhalt der E-Mail im zweiten Element des zurückgegebenen Tupels gespeichert ist und seine Speicherform ein Array ist. Lassen Sie uns testen, wie dieses Array aussieht.

Wir können sehen, dass die Speicherform dieses Arrays einem Diktat ähnelt! Auf dieser Grundlage können wir alles finden, was uns interessiert. Wenn unser Beispielcode beispielsweise den Betreff und den Absender der E-Mail ermitteln soll, kann er wie der obige Code geschrieben werden. Natürlich können Sie auch das reguläre Matching verwenden~~~ Hier sind die Testergebnisse:

Nun... Sie können es selbst ausprobieren.

3. Smtp sendet E-Mail

Wie bei Pop müssen Sie es vor der Verwendung von SMTP mit einigen erforderlichen Konstanten versehen:

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

Das Obige ist der Code zum Anmelden beim Postfach über SMTP, ähnlich wie bei Pop. Der Code zum Senden von E-Mails über SMTP ist unten angegeben. Sie werden sehen, wie einfach und schön Python ist!

# 发送邮件 
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)

Dies ist der Code zum Senden von E-Mails mit SMTP in Python! Es ist ganz einfach! Sehr praktisch! Sehr leicht zu verstehen! Die Hauptmethode ist hier sendmail. Geben Sie einfach den Absender, den Empfänger und den E-Mail-Inhalt an. Es gibt auch MIMEText, der wie folgt definiert werden kann:

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)

Siehe die Kommentare~~~ Dies ist lediglich eine Methode zum Generieren eines MIME-Dokuments mit angegebenem Inhalt und angegebener Kodierung. Werfen wir übrigens einen Blick auf die sendmail-Methode~~~

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.

Hmm... Das war's auch schon mit dem Versenden von E-Mails über SMTP.

4. Quellcode und Tests

# -*- 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()

Der obige Code meldet sich zuerst beim Postfach an, ruft dann die erste E-Mail ab und löscht sie Anschließend wird die E-Mail mit Betreff und Absender ausgedruckt und schließlich eine erfolgreiche E-Mail an ein anderes BossMail-Postfach gesendet.

Die Testergebnisse lauten wie folgt:

Okay, Sie können den obigen Code kopieren und selbst damit spielen

Verwandte Empfehlungen:

E-Mails in Python senden und empfangen

thinkphp implementiert 163. So senden und empfangen Sie E-Mails in QQ mailbox_PHP

E-Mails mit PHP senden und empfangen

Das obige ist der detaillierte Inhalt vonEinfache Implementierung der Funktion zum Senden und Empfangen von E-Mails in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn