Python SMTP傳送郵件

wozaiyizhideng發表於2020-09-30

SMPT

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。

python的smtplib提供了一種很方便的途徑傳送電子郵件。它對smtp協議進行了簡單的封裝。

Python建立 SMTP 物件語法如下:

import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

引數說明:

  • host: SMTP 伺服器主機。 你可以指定主機的ip地址或者域名如: runoob.com,這個是可選引數。
  • port: 如果你提供了 host 引數, 你需要指定 SMTP 服務使用的埠號,一般情況下 SMTP 埠號為25。
  • local_hostname: 如果 SMTP 在你的本機上,你只需要指定伺服器地址為 localhost 即可。

Python SMTP

Python SMTP 物件使用 sendmail 方法傳送郵件,語法如下:

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

引數說明:

  • from_addr: 郵件傳送者地址。
  • to_addrs: 字串列表,郵件傳送地址。
  • msg: 傳送訊息

這裡要注意一下第三個引數,msg 是字串,表示郵件。我們知道郵件一般由標題,發信人,收件人,郵件內容,附件等構成,傳送郵件的時候,要注意 msg 的格式。這個格式就是 smtp 協議中定義的格式。

 

網易163免費郵箱相關伺服器資訊:

163免費郵客戶端設定的POP3、SMTP、IMAP地址

 

使用Python傳送HTML格式的郵件

#!/usr/bin/python
# -*- coding: UTF-8 -*-


import argparse
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr


parser = argparse.ArgumentParser(description='send mail ...')
parser.add_argument('-f', required=True, nargs='+', help='sender email')
parser.add_argument('-p', required=True, nargs='+', help='sender email passwd')
parser.add_argument('-t', required=True, nargs='+', help='seceivers email')
parser.add_argument('-s', required=True, nargs='+', help='email subject')
parser.add_argument('-b', required=True, nargs='+', help='email html file')
args = parser.parse_args()

my_sender = args.f[0]                  # 發件人郵箱賬號
my_pass = args.p[0]                    # 發件人郵箱密碼
my_user = args.t[0]                    # 收件人郵箱賬號
my_user_list = my_user.split(",")      # 收件人郵箱賬號
email_subject = args.s[0]              # 郵件主題
html_file = args.b[0]                  # 郵件HTML

report_html = open(html_file, "r")
mail_msg = report_html.read()

def mail():
    ret = True
    try:
        msg = MIMEText(mail_msg,'html','utf-8')
        msg['From'] = my_sender                                      
        msg['To'] = ",".join(my_user_list)                           
        msg['Subject'] = email_subject                               

        # 發件人郵箱中的SMTP伺服器,埠是25
        server = smtplib.SMTP("smtp.163.com'", 25)
        # 列印出和SMTP伺服器互動的所有資訊
        server.set_debuglevel(1)
        # 括號中對應的是發件人郵箱賬號、郵箱密碼
        server.login(my_sender, my_pass)
        # 括號中對應的是發件人郵箱賬號、收件人郵箱賬號、傳送郵件
        server.sendmail(my_sender, my_user_list, msg.as_string())
        # 關閉連線
        server.quit()

    # 如果 try 中的語句沒有執行,則會執行下面的 ret=False
    except Exception:                                                
        ret = False
    return ret
 
ret = mail()
if ret:
    print("郵件傳送成功")
else:
    print("郵件傳送失敗")

html

  <html>
  <body>
  <table border=1 bgcolor=538DD5 width=40%>
  <tr align=center><td>This is test email</td></tr>

  </table>

  <table border=1 bgcolor=F3E2A9 width=40%>
  <tr align=center><th>hello world</th></tr>

  <table border=1 bgcolor=CCCCCC width=40%>
  <tr align=center>
  <th>序號</th>
  <th>url</th>
  </tr>

  <tr align=center>
  <td>1</td>
  <td><a href=https://www.baidu.com>百度一下</a></td>
  </tr>

  <tr align=center>
  <td>2</td>
  <td><a href=https://www.qq.com>騰訊</a></td>
  </tr>

  </table>
  </body>  
  </html>

執行

python send_mail.py -f "zhangsan@163.com" -p "**********" -t "zhangsan@163.cn,lisi@163.com,wangmazi@qq.com" -s "this is test email" -b "test.html"

 

結果

相關文章