可以使用 crontab 调用的 bash 脚本发送电子邮件,但不能通过 Jenkins 作业发送电子邮件

可以使用 crontab 调用的 bash 脚本发送电子邮件,但不能通过 Jenkins 作业发送电子邮件

我安装并配置了一个邮件客户端:

sudo apt-get install heirloom-mailx
sudo vi /etc/ssmtp/ssmtp.conf
mailhub=smtp.mail.yahoo.com:587
FromLineOverride=YES
[email protected]
AuthPass=mypassword
UseSTARTTLS=YES

然后我使用 bash 脚本创建并发送一封邮件:

#!/bin/sh -x
sender="[email protected]"
recipient="[email protected]"
zipfile="results/file.zip"
today=`date +\%d-\%m-\%Y`
mailSubject="My subject on the "$today
mailBody="Les résultats de la fiabilisation des données du $today sont dans le fichier zip.\n\nMy-Company"
echo $mailBody | mail -s "$mailSubject" -r "My Company <$sender>" -S replyto="$sender" -a $zipfile $recipient

crontab 作业确实发送了邮件,并且我在我的邮箱中收到了它:

05 12 * * * /home/.../script.sh

但是詹金斯工作似乎没有发送它,我的邮箱里没有收到任何内容:

/home/.../script.sh > logs/script.log 2>&1

script.log 显示邮件命令被调用:

+ mail -s My subject -r My Company <[email protected]> -S [email protected] -a /home/.../results/file.zip [email protected]

我编辑掉了敏感数据。

詹金斯作业显示作业成功为蓝球。

另外需要注意的是,在使用crontab接收我公司邮箱的邮件时,用于登录smtp的gmail邮箱也会收到一封抱怨邮件:

Address not found
Your message wasn't delivered to [email protected] because the address couldn't be found. Check for typos or unnecessary spaces and try again.

更新:如果不是在script.shbash 脚本中构建邮件并让 Jenkins 执行此 bash 脚本,而是让 Jenkins 直接构建邮件,那么邮件就会被发送并且我会在我的邮箱中收到它。

答案1

该问题已通过使用mutt邮件客户端得到解决。

当 Jenkins 作业调用该mail.sh脚本文件时,它会发送邮件,然后我会在我的邮箱中收到它。

#!/bin/bash

sender="[email protected]"

recipient="[email protected]"

zipfile="/home/.../file.zip"

today=`date +\%d-\%m-\%Y`

mailSubject="The subject "$today

mailBody=$(cat /home/.../mail-body.html)
mailBody="${mailBody/\$today/$today}"

echo "$mailBody" | mutt -s "$mailSubject" -e "set content_type=text/html" -e "my_hdr From:My Name <$sender>" -a "$zipfile" -- $recipient

相关内容