Linux如何使用sendmail命令发送带附件的邮件

我想发送带附件的邮件,下面是代码,邮件是发送了,但是附件上虽然显示了文件名,但是实文件并没有添加上

PARAM_ATTACH1="/work/iyec/TEST.csv"
PARAM_ZIP="TEST.CSV"
PARAM_ZIP_DIR="/work/iyec/"
zip -j ${PARAM_ZIP}.zip ${PARAM_ATTACH1}

##
MAIL_LST="/ryu1/common/rls/param/iyec_teijyo_check_mail.lst"
MAIL_FROM=`grep "MAIL_FROM" ${MAIL_LST} | awk -F"=" '{print $2}' | sed 's/"//g'`
MAIL_TO=`grep "MAIL_TO" ${MAIL_LST} | awk -F"=" '{print $2}' | sed 's/"//g'`
MAIL_TITLE=`grep "MAIL_TITLE" ${MAIL_LST} | awk -F"=" '{print $2}' | sed 's/"//g'`
#
echo "test。"  >>  ${MAIL_BODY}
cp  /dev/null ${HOBUN_FILE_TEMP}
SYS_DATE_TITLE=`date "+%Y""%m%d %H"":%M"":%S"`
echo "From: ${MAIL_FROM}" > ${HOBUN_FILE_TEMP}
echo "To :${MAIL_TO}" >> ${HOBUN_FILE_TEMP}
echo "Subject :`echo "${MAIL_TITLE}_${SYS_DATE_TITLE}" | iconv -f UTF-8 -t ISO-2022-JP | base64 -w0 | xargs printf '=?iso-2022-jp?B?%s?='`" >> ${HOBUN_FILE_TEMP}
echo "MIME-Version: 1.0" >> ${HOBUN_FILE_TEMP}
echo "Content-type: multipart/mixed; boundary=${MAIL_BOUNDARY}" >> ${HOBUN_FILE_TEMP}
echo "Content-Transfer-Encoding: 7bit" >> ${HOBUN_FILE_TEMP}
echo "--${MAIL_BOUNDARY}" >> ${HOBUN_FILE_TEMP}
echo "Content-Type: text/plain; charset=ISO-2022-JP-2" >> ${HOBUN_FILE_TEMP}
echo "Content-Transfer-Encoding: 7bit" >> ${HOBUN_FILE_TEMP}
echo "" >> ${HOBUN_FILE_TEMP}
cat ${MAIL_BODY} | tr -d "\015" | iconv -f UTF-8 -t ISO-2022-JP-2 >> ${HOBUN_FILE_TEMP}
echo "" >> ${HOBUN_FILE_TEMP}
echo "--${MAIL_BOUNDARY}" >> ${HOBUN_FILE_TEMP}
echo "Content-type: application/zip;" >> ${HOBUN_FILE_TEMP}
echo " name=${PARAM_ZIP}.zip" >> ${HOBUN_FILE_TEMP}
echo "Content-Transfer-Encoding: base64" >> ${HOBUN_FILE_TEMP}
echo "Content-Disposition : attachment;" >> ${HOBUN_FILE_TEMP}
echo "filename=${PARAM_ZIP_DIR}/${PARAM_ZIP}.zip" >> ${HOBUN_FILE_TEMP}
echo "" >> ${HOBUN_FILE_TEMP}
cat ${PARAM_ZIP_DIR}/${PARAM_ZIP}.zip | base64 >> ${HOBUN_FILE_TEMP}
echo "--${MAIL_BOUNDARY}--" >> ${HOBUN_FILE_TEMP}
echo "sendmail -f ${MAIL_FROM} -v -i ${MAIL_TO} < ${HOBUN_FILE_TEMP}" >> ${LOG_FILE}
sendmail -f ${MAIL_FROM} -v -i ${MAIL_TO} < ${HOBUN_FILE_TEMP} 1>> ${LOG_FILE} 2>> ${LOG_FILE}
RETCOD=$?
rm -f ${MAIL_BODY} >> ${LOG_FILE}
rm -f ${HOBUN_FILE_TEMP} >> ${LOG_FILE}
if [ $RETCOD -eq 0 ]
then
  echo "正常終了" >> ${LOG_FILE}
   logJobResultMessage 0
else
  echo "異常終了" >> ${LOG_FILE}
  logJobResultMessage 1
fi

测试结果‘

img

试一下用mime-construct来实现呢

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你看下这篇博客吧, 应该有用👉 :Centos的sendmail邮件系统部署和运维、部分用户不能收邮件、关于sendmail的零碎小细节、邮件-各种注意事项(大概)问题解决
  • 除此之外, 这篇博客: sendmail邮件服务器中的 低内存开启的方式 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. SSL会占用大量CPU资源,禁用
    2. 一般默认明文是不安全的,所以把“禁止明文”关闭
    3. imap pop3 lmtp三选一,我建立邮箱就是为了哪里都能看到,所以选pop3
    hostname thaad.xyz
    echo "thaad.xyz" > /etc/hostname
    echo "127.0.0.1 thaad.xyz" >> /etc/hosts
    yum install -y sendmail dovecot
    sed -i "s/Addr=127.0.0.1/Addr=0.0.0.0/" /etc/mail/sendmail.cf
    echo "disable_plaintext_auth = no" >> /etc/dovecot/dovecot.conf
    echo "mail_location = mbox:~/mail:INBOX=/var/spool/mail/%u" >> /etc/dovecot/dovecot.conf
    echo "protocols = pop3" >> /etc/dovecot/dovecot.conf
    echo "ssl = no" >> /etc/dovecot/dovecot.conf
    echo "To:qq.com RELAY" >> /etc/mail/access
    systemctl enable sendmail.service --now
    systemctl enable dovecot.service --now
    adduser thaad
    echo 'thaad:000000' | chpasswd
    chmod 600 /var/spool/mail/thaad
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^