亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決Cron定時(shí)任務(wù)中Pytest腳本無法發(fā)送郵件的問題

 更新時(shí)間:2025年01月17日 09:51:07   作者:Melantha007  
文章探討解決在 Cron 定時(shí)任務(wù)中運(yùn)行 Pytest 腳本時(shí)郵件發(fā)送失敗的問題,先優(yōu)化環(huán)境變量,再檢查 Pytest 郵件配置,接著配置文件確保 SMTP 服務(wù)正常,包括編輯相關(guān)文件、配置認(rèn)證信息等,還提及常見問題排查,如防火墻等,最終使郵件功能在定時(shí)任務(wù)中成功運(yùn)行

引言

在使用Cron定時(shí)任務(wù)運(yùn)行Pytest的manage.py腳本時(shí),有時(shí)會(huì)遇到腳本能夠成功執(zhí)行,但郵件發(fā)送功能卻無法正常工作的問題。這種問題通常是由于環(huán)境配置不足、路徑設(shè)置不正確,或者郵件服務(wù)器配置不當(dāng)?shù)仍驅(qū)е碌?。本文將探討如何解決這一問題,并提供詳細(xì)的步驟和解決方案。

1. 環(huán)境變量優(yōu)化:確保Cron任務(wù)可以正確執(zhí)行

首先,確保在Cron定時(shí)任務(wù)中運(yùn)行的腳本環(huán)境和你平時(shí)在終端手動(dòng)運(yùn)行的環(huán)境一致。在開發(fā)環(huán)境中,Pytest腳本通常依賴于一些環(huán)境變量,這些環(huán)境變量需要在Cron任務(wù)中正確配置。

解決方案:

可以通過將較長的命令拆分成腳本來優(yōu)化,并在cron中調(diào)用該腳本,避免直接在cron中寫入過長的命令。這樣不僅簡潔,而且便于管理和維護(hù)。

1.1. 創(chuàng)建一個(gè)腳本

首先,在項(xiàng)目目錄下創(chuàng)建一個(gè)新的腳本文件,比如 run_manage.sh,內(nèi)容如下:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 設(shè)置環(huán)境變量(替換成你的真實(shí)虛擬環(huán)境的地址)
export PATH=/root/myenv/bin:$PATH
export PYTHONPATH=/root/myenv/bin/packages:$PYTHONPATH

# 激活虛擬環(huán)境(替換成你的真實(shí)虛擬環(huán)境的地址)
source /root/myenv/bin/activate

# 執(zhí)行腳本(/path/to/project/替換為你的腳本路徑)
/root/myenv/bin/python /path/to/project/manage.py >> /var/log/manage.log 2>&1

確保腳本可執(zhí)行(替換為你的而真實(shí)run_manage.sh路徑):

chmod +x /path/to/run_manage.sh

1.2. 修改cron配置

然后,在cron中調(diào)用該腳本。修改cron的配置如下:

00 08 * * * cd /path/to/project && /path/to/run_manage.sh

這樣就避免了在cron中寫入過長的命令,提高了可讀性和可維護(hù)性。

2. 腳本能夠執(zhí)行,但郵件發(fā)送失敗

當(dāng)確保Cron任務(wù)的環(huán)境配置正確后,腳本能夠成功運(yùn)行,但郵件發(fā)送依然不成功時(shí),問題可能出在郵件服務(wù)器的配置或者Pytest的郵件設(shè)置上。

解決方案:

檢查Pytest郵件配置確保Pytest項(xiàng)目的配置文件中正確配置了郵件相關(guān)的設(shè)置。QQ的郵件配置如下:

def send_email(total, passed, failed):
 # 郵件內(nèi)容設(shè)置
 subject = "Pytest Test Report"
 body = f"""
 <html>
   <body>
     <p>Hi all:</p>

   
     <p>以下是本次接口測試的結(jié)果:</p>
<ul>
     <li ><strong>總測試數(shù): {total}</strong></li>
     <li ><strong>通過數(shù):{passed}</strong></li>
     <li style="color: red;"><strong>失敗數(shù):{failed}</strong></li>
</ul>
     <p>                               測試團(tuán)隊(duì)</p>
   </body>
 </html>
"""
 mail_host = "smtp.qq.com"  # 設(shè)置服務(wù)器
 sender_email = "ZZZZZZZZZ@qq.com"  # 用戶名
 receiver_email = "ZZZZZZZZZZZZ@126.com"
 password = "############"  # 授權(quán)碼

 # 設(shè)置MIME郵件對象
 msg = MIMEMultipart()
 msg['From'] = "ZZZZZZZZZ@qq.com"
 msg['To'] = receiver_email
 msg['Subject'] = subject

 # 使用'html'格式將報(bào)告嵌入到郵件正文
 msg.attach(MIMEText(body, 'html'))

 # 發(fā)送郵件
 try:
     with smtplib.SMTP(mail_host, 587) as server:
         server.ehlo()  # 再次發(fā)送 EHLO,更新安全會(huì)話
         server.starttls()  # 啟動(dòng) TLS 加密
         server.ehlo()  # 發(fā)送 EHLO 命令
         server.login(sender_email, password)  # 使用授權(quán)碼進(jìn)行登錄
         server.sendmail(sender_email, receiver_email, msg.as_string())
     print("Email sent successfully")
 except smtplib.SMTPException as e:
     print(f"SMTP error occurred: {e}")
 except Exception as e:
     print(f"Failed to send email: {e}")

3. 配置main.cf文件:確保SMTP服務(wù)正常工作

如果郵件發(fā)送還是不成功,問題可能出在郵件服務(wù)本身,特別是SMTP服務(wù)器配置。可以嘗試配置main.cf文件,來調(diào)整郵件發(fā)送的相關(guān)參數(shù)。

3.1. 編輯main.cf文件

在使用Postfix等郵件服務(wù)器時(shí),main.cf文件控制著郵件服務(wù)的配置。可以檢查并確保以下幾個(gè)配置項(xiàng)被正確設(shè)置:

# 編輯main.cf
sudo nano /etc/postfix/main.cf

確保以下設(shè)置項(xiàng)正確:

 # 啟用 SASL 身份驗(yàn)證
 smtp_sasl_auth_enable = yes
 smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
 smtp_sasl_security_options = noanonymous
 smtp_sasl_tls_security_options = noanonymous
 # TLS 配置
 smtp_use_tls = yes
 smtp_tls_security_level = encrypt
 smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
 alias_maps = hash:/etc/aliases
 alias_database = hash:/etc/aliases

 mydestination = localhost, localhost.localdomain,ajcloud,net
 myhostname = mail.example.com
 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
 mailbox_size_limit = 0
 recipient_delimiter = +
 inet_interfaces = all
 inet_protocols = all
 relayhost = [smtp.qq.com]:587
 debug_peer_level = 3
 debug_peer_list = smtp.qq.com
 smtp_helo_name = mail.example.com
 smtpd_helo_required = yes
 myorigin = /etc/mailname
 smtp_generic_maps = hash:/etc/postfix/generic

這些設(shè)置項(xiàng)允許Postfix通過指定的SMTP服務(wù)器進(jìn)行身份驗(yàn)證,并啟用TLS加密來保證郵件的安全性。

3.2. 配置sasl_passwd文件

如果使用SMTP身份驗(yàn)證,還需要配置sasl_passwd文件,指定SMTP服務(wù)器的認(rèn)證信息:

# 編輯sasl_passwd
sudo nano /etc/postfix/sasl_passwd

文件內(nèi)容應(yīng)為:

[smtp.your-email-provider.com]:587    your-email@example.com:your-email-password

然后運(yùn)行以下命令生成密碼哈希:

sudo postmap /etc/postfix/sasl_passwd

為了在Postfix的main.cf文件中增加這兩個(gè)配置項(xiàng),你可以按照以下步驟進(jìn)行操作:

3.3. 配置generic 文件

在main.cf文件中添加以下配置項(xiàng):

myorigin = /etc/mailname
smtp_generic_maps = hash:/etc/postfix/generic

這兩個(gè)配置項(xiàng)的作用:

  • myorigin 用于指定郵件的來源域名,通常設(shè)置為 /etc/mailname,它會(huì)使用該文件中的域名作為郵件發(fā)送的發(fā)件人地址。
  • smtp_generic_maps 用于指定Postfix如何處理郵件的發(fā)件人地址映射,/etc/postfix/generic 文件通常用于將本地發(fā)件人地址映射到外部SMTP服務(wù)器的郵件地址。

如果你還沒有創(chuàng)建/etc/postfix/generic文件,需要?jiǎng)?chuàng)建該文件并配置映射規(guī)則。例如:

sudo nano /etc/postfix/generic

在文件中添加類似如下的映射規(guī)則:

# 格式: 本地用戶 -> 外部郵件地址
root@mail.example.com   [填寫腳本中的sender_email]
root@localhost          [填寫腳本中的sender_email]
[填寫腳本中的receiver_email] [填寫腳本中的receiver_email]

3.4. 生成generic文件的哈希文件

配置好后,需要生成generic文件的哈希文件,命令如下:

sudo postmap /etc/postfix/generic

3.5. 重啟Postfix服務(wù)

配置完成后,重啟Postfix服務(wù)使配置生效:

sudo systemctl restart postfix

3.6. cronf中增加MAILTO

MAILTO=[填寫腳本中的receiver_email]

4. 其他常見問題排查

  • 郵件防火墻/防病毒:有時(shí)防火墻或防病毒軟件可能會(huì)阻止SMTP連接,確保相關(guān)端口(通常為587或465)在防火墻中開放。

總結(jié)

通過正確配置環(huán)境變量、檢查Pytest郵件設(shè)置、調(diào)試腳本及服務(wù)器配置,可以有效解決通過Cron任務(wù)運(yùn)行Pytest腳本時(shí),郵件發(fā)送失敗的問題。確保Cron任務(wù)的環(huán)境與手動(dòng)運(yùn)行時(shí)的一致,檢查郵件服務(wù)器配置,并結(jié)合日志輸出排查錯(cuò)誤,最終可以使郵件功能在定時(shí)任務(wù)中成功運(yùn)行。

以上就是解決Cron定時(shí)任務(wù)中Pytest腳本無法發(fā)送郵件的問題的詳細(xì)內(nèi)容,更多關(guān)于Cron Pytest腳本無法發(fā)送郵件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論