系统相关
首页 > 系统相关> > 来自heirloom mailx的HTML电子邮件在linux上

来自heirloom mailx的HTML电子邮件在linux上

作者:互联网

我一直试图通过在linux服务器上发送来自mailx的html电子邮件.

几点说明:

>我必须指定一个smtp服务器,因此我不能使用sendmail
(这不是我可以改变的事情)
>我无法安装第三方的东西,比如mutt.我将不得不使用
邮件或邮件
>由于我的mail / x版本是传家宝,我没有–append或-a(附加标题选项)
>不确定这是否有帮助,但我的Linux发行版是7.3(Maipo)

我在大多数帖子中看到的stackoverflow为我的情况:

mailx -v -S smtp=SERVER -s "$(echo -e "This is the subject\nContent-Type: text/html")" -r FROM TO < htmlmail.txt

这只是在我的情况下返回纯文本电子邮件.

所以这是我到目前为止所尝试的:

试试1:

我在帖子中看到添加Content-Disposition:inline.

mailx -v -S smtp=SERVER -s "$(echo -e "This is the subject v1\nContent-Type: text/html\nMIME-Version: 1.0\nContent-Disposition: inline")" -r FROM TO < htmlmail.txt

这最终会发送一个html电子邮件,但由于标题与主体内联,因此它会输出:

Content-Disposition: inline Message-ID: User-Agent: Heirloom
mailx 12.5 7/5/10 MIME-Version: 1.0 Content-Type: text/plain;
charset=us-ascii Content-Transfer-Encoding: 7bit Hello World

试试2:

所以我不希望标题打印在身体中.所以我尝试删除Content-Disposition:inline

mailx -v -S smtp=SERVER -s "$(echo -e "This is the subject v2\nContent-Type: text/html\nMIME-Version: 1.0")" -r FROM TO < htmlmail.txt

这最终会发送一个简单的测试电子邮件:

<html>
<b>Hello World</b>
</html>

尝试3:

尝试翻转翻转内容类型和mime版本

mailx -v -S SERVER -s "$(echo -e "This is the subject v3\nMIME-Version: 1.0\nContent-Type: text/html")" -r FROM TO < htmlmail.txt

我最终没有收到此代码的电子邮件

尝试4:

我在网上看到尝试另一个标题来帮助找到问题所在.所以我添加了header选项来设置邮件优先级.

mailx -v -S smtp=SERVER -s "$(echo -e "This is a subject v4\nContent-Type: text/html\nX-Priority: 1 (Highest)")" -r FROM TO < htmlmail.txt

这最终发送了一个高优先级的电子邮件,但都是纯文本.

试试5:

我在上一次尝试的MIME标题上添加了

mailx -v -S smtp=SERVER -s "$(echo -e "This is a subject v5\nMIME-Version: 1.0\nContent-Type: text/html\nX-Priority: 1 (Highest)")" -r FROM TO < htmlmail.txt

这最终发送了一个带有标题的电子邮件,并且优先级没有设置为高……很奇怪

X-Priority: 1 (Highest) Message-ID: User-Agent: Heirloom mailx
12.5 7/5/10 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hello World

在所有这些之后,我尝试了上述尝试的许多其他改编,但它们没有产生新的输出.

所以任何建议或想法都很乐意接受!请记住上面列出的限制因素……我知道它们限制了我的选择,但这是我无法控制的.

谢谢你的时间!

解决方法:

首先是一些背景:
我使用heirloom-mailx版本作为以下线程中的版本:
https://serverfault.com/questions/136106/what-package-to-install-for-sending-emails-from-localhost-ubuntu

我正在使用Ubuntu 16.04 Xenial.也尝试在Ubuntu Server 16.04上.

为了发送电子邮件,我使用以下函数使用mailx(bash中的传家宝mailx)发送邮件:

sendmail() {
#Sending Report Email
heirloom-mailx -a $2 -v -s ""$(echo -e "subject 3\nContent-Type: text/html")"" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=smtp://mail.mymailserver:port \
-S from="example@mymailserver.com" \
-S smtp-auth-user=example@mymailserver.com \
-S smtp-auth-password='password' \
-S ssl-verify=ignore \
$1 < body.html
}

其中2美元是附件,1美元是目的地.
笔记:
1.附加的文件也会打印在正文中,但如果您只想发送没有附件的html文件,这对您有用.
2.使用“-v”选项打印详细信息,这样您可能会遇到可以忽略的.mime.types问题.如果您不想在mailx上使用详细信息,请删除该选项.
3.如果使用“-a”选项,您仍然会在正文中获得以下内容:
这是MIME格式的多部分消息. – = – = fFPa7dLqoSF1TGj-YDc2k8bdvmjpix_4sKFT = – = Content-Type:text / plain; charset = US-ASCII Content-Disposition:inline

在这种情况下,我附加一个纯文本文件.
从命令中删除“-a $2”,您将全部设置为打印html消息.
所以最终的结果是:

sendmail() {
    #Sending Report Email
    heirloom-mailx -s ""$(echo -e "subject 3\nContent-Type: text/html")"" \
    -S smtp-use-starttls \
    -S ssl-verify=ignore \
    -S smtp-auth=login \
    -S smtp=smtp://mail.mymailserver:port \
    -S from="example@mymailserver.com" \
    -S smtp-auth-user=example@mymailserver.com \
    -S smtp-auth-password='password' \
    -S ssl-verify=ignore \
    $1 < body.html
    }

尝试一下,让我知道.我已经测试了我的结果,它的工作原理.

希望这可以帮助!最好的祝福

标签:html,linux,mailx,mail-command
来源: https://codeday.me/bug/20190813/1648539.html