日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

无法用php smtp发送邮件. 您的服务器可能没有配置用此方法_Web自动化测试:邮件发送测试报告...

發布時間:2024/10/8 php 82 豆豆
生活随笔 收集整理的這篇文章主要介紹了 无法用php smtp发送邮件. 您的服务器可能没有配置用此方法_Web自动化测试:邮件发送测试报告... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在我們運行完整個項目后,已經生成了 測試報告,一般自動化會在本地或者公司服務器上運行,那如何獲取自動化測試的運行結果呢,此時就需要把測試結果以郵件的形式發送到郵箱,這樣就可以在測試完成的第一時間知道測試結果。

所以我們需要來學習一下如果使用python第三方庫來發送郵件。

其實關于發送郵件的方法,復制粘貼過來,修改下參數、賬號、密碼后,直接使用就可以了,再把數據寫到配置中參數化基本就搞定。

一、發送郵件的步驟

關于發送郵件,步驟有三步:定義配置信息、定義郵件內容、發送郵件

第一步:定義配置信息

這一步將所有需要用到的:郵箱服務器地址、郵箱端口、郵箱賬號、密碼等信息先列出來,可以在方法中直接賦值,也可以放到config配置文件中,讀取后賦值。

# 接收郵箱 receiver = "***@****.com"# 發送郵件服務器 smtp_server = "smtp.***.com" port = "25"# 發送郵箱賬號和密碼(或者授權碼) username = "***@***.com" password = "****"

第二步:定義郵件內容

郵件內容,我通過文件路徑來讀取html格式的文件,從而獲取到郵件的內容。然后設置郵件的標題、發送方、收件方、正文內容、附件格式、附件內容等。

# 讀取測試報告文件(report_file:測試報告文件路徑) mail_body = open(report_file, "r", encoding="utf-8").read() # 定義郵件內容 msg = MIMEMultipart() body = MIMEText(mail_body, _subtype='html', _charset='utf-8') msg['Subject'] = u"自動化測試報告" msg['from'] = username msg['to'] = receiver msg["date"] = time.strftime('%a, %d %b %Y %H:%M:%S %z') msg.attach(body) # 定義附件內容 att = MIMEText(mail_body, "base64", "utf-8") att["Content-Type"] = "application/octet-stream" att["Content-Disposition"] = 'attachment; filename= "report.html"' msg.attach(att)

第三步:發送郵件

確定好郵件內容后,需要發送郵件了,不同的加密方式發送方法會有些不同,這個在下文具體探討下。

# 連接郵箱服務器 smtp = smtplib.SMTP() smtp.connect(host=smtp_server, port=port) # tls加密方式 smtp.ehlo() smtp.starttls() smtp.ehlo() # 登錄郵箱 smtp.login(username, password) # 發送郵件 smtp.sendmail(username, receiver, msg.as_string()) # 斷開連接 smtp.quit()

二、發送郵件的注意事項

我在研究了發送郵件后,發現不同情況下,發送郵件的方式也有不同之處,這里整理如下:

2.1使用不同郵件發送方

目前我嘗試過使用163郵箱、qq郵箱、zimbra郵箱進行發送郵件,每個郵箱設置不同,每個郵箱也沒有全面測試所支持的發送類型,這里大概講下我對每個郵箱的感受吧,不作為參考。其中:

163郵箱比較簡單,我只設置了服務地址,在connect連接后直接可以登錄發送(可能和我163郵箱設置有關)

qq郵箱需要設置一個授權碼,然后使用授權碼來進行連接登錄

zimbra郵箱是公司部署的一個郵箱系統,沒有授權碼,但是需要加密進行登錄。

郵箱賬戶開啟第三方發送功能:

163郵箱:在設置菜單中,選擇POP3/SMTP/IMAP選項,設置開啟SMTP發送功能。

Qq郵箱:在設置-賬戶中,設置開啟SMTP發送功能

2.2不同加密方式的登錄

這里我整理的幾種加密方式,有明文不加密、ssl、tls這三種方式,不同的加密方式有不同的登錄方法。

明文不加密:

默認使用smtp的端口(默認值25)具體端口值以郵箱設置為準。

# 連接郵箱服務器 smtp = smtplib.SMTP() smtp.connect(host=smtp_server, port='25') # 登錄郵箱 smtp.login(username, password)

ssl加密方式:

默認使用ssl端口(默認值465)具體端口值以郵箱設置為準。

# 連接郵箱服務器 smtp = smtplib.SMTP_SSL() smtp.connect(host=smtp_server, port='465') # 登錄郵箱 smtp.login(username, password)

tls加密方式:

默認使用smtp的端口(默認值25)具體端口值以郵箱設置為準。

# 連接郵箱服務器 smtp = smtplib.SMTP() smtp.connect(host=smtp_server, port='25') # tls加密 smtp.ehlo() smtp.starttls() smtp.ehlo() # 登錄郵箱 smtp.login(username, password)

2.3無法發送時如何檢查

當遇到無法發送郵件時,根據我踩過的坑,來給出幾點建議吧。

1.確定郵箱已經開啟smtp功能,并且確定是否開啟授權碼登錄,如果開啟則需要使用授權碼登錄。

2.確定郵箱端口port值是否正確,是465、587、25,或者郵箱系統定義的其他端口

3.確定郵箱支持的加密方式,以及不同加密方式對應的端口值正確與否。

三、代碼實例

這里根據項目,我創建了send_mail.py的文件,在里面除了發送郵件的方法,根據項目結構加入了一個查找report報告文件夾最后生成文件的方法,并且獲取到文件路徑后,作為要發送的內容:

send_mail.py

# -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import time import osdef find_report_name():"""查找最后生成的報告文件的路徑"""result_dir = os.path.abspath('..') + "report"lists = os.listdir(result_dir)lists.sort(key=lambda fn: os.path.getmtime(result_dir + "" + fn))file_name = os.path.join(result_dir, lists[-1])return file_namedef send_email(report_file):"""發送郵件方法"""try:# 配置郵件信息# 接收郵箱receiver = "***@***.com"# 發送郵件服務器smtp_server = "smtp.***.com"port = "25"# 發送郵箱賬號和密碼(授權碼)username = "***@***.com"password = "***"# 讀取測試報告文件mail_body = open(report_file, "r", encoding="utf-8").read()# 定義郵件內容msg = MIMEMultipart()body = MIMEText(mail_body, _subtype='html', _charset='utf-8')msg['Subject'] = u"自動化測試報告"msg['from'] = usernamemsg['to'] = receivermsg["date"] = time.strftime('%a, %d %b %Y %H:%M:%S %z')msg.attach(body)# 定義附件內容att = MIMEText(mail_body, "base64", "utf-8")att["Content-Type"] = "application/octet-stream"att["Content-Disposition"] = 'attachment; filename= "report.html"' msg.attach(att)# 連接郵箱服務器smtp = smtplib.SMTP()smtp.connect(host=smtp_server, port=port)# tls加密方式smtp.ehlo()smtp.starttls()smtp.ehlo()# 登錄郵箱smtp.login(username, password)# 發送郵件smtp.sendmail(username, receiver, msg.as_string())# 斷開連接smtp.quit()print("%s 發送成功,查收%s郵箱" % (username, receiver))except Exception as e:print(e)def send_report():"""發送測試報告"""send_email(find_report_name())

總結

以上是生活随笔為你收集整理的无法用php smtp发送邮件. 您的服务器可能没有配置用此方法_Web自动化测试:邮件发送测试报告...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。