【问题标题】:Force Content Type with sendmail使用 sendmail 强制内容类型
【发布时间】:2023-03-19 02:31:01
【问题描述】:

我在使用 sendmail 发送邮件时遇到了一个小问题:每封邮件都使用Content-Type: multipart/alternative 发送,但我想知道只在Content-Type: text/plain 发送我的邮件。原因是因为 GMAIL Web 界面尊重 RFC,我的消息显示为最新的 Content-type,但因为我的消息不是 HTML,所以显示很糟糕。

我的 bash 脚本如下:

#!/bin/bash

SENDMAIL_BIN='/usr/sbin/sendmail'
FROM_MAIL_ADDRESS='noreply@plop.com'
FROM_MAIL_DISLAY='Test format mail'
RECIPIENT_ADDRESSES='me@plop.com'

MAIL_CMD="$SENDMAIL_BIN -f $FROM_MAIL_ADDRESS -F \"$FROM_MAIL_DISLAY\" $RECIPIENT_ADDRESSES"
(echo "Subject: Test format";echo -e "MIME-Version: 1.0\nContent-Type: text/plain;\n\n" && cat output.txt) | eval $MAIL_CMD

但我的脚本似乎没有重写Content-Type,它仍然是Content-type: multipart/alternative(根据我邮件的显示原件)。

注意

  • 在我的 output.txt 中没有什么特别之处(仅来自我的应用程序的日志行)。
  • 我尝试了 gruik hack:在 Content-Type: text/html 部分的邮件源中添加 <pre></pre>,但显示仍然很糟糕 <pre>...

如果您有任何线索,或者如果您知道如何使用 sendmail 更改 Content-Type 的顺序,请告诉我。

提前致谢

【问题讨论】:

    标签: bash gmail sendmail content-type


    【解决方案1】:

    我有一个非解决方案,我不会强制我的邮件在text/plain 中,而是在text/html 中发送邮件,但我会添加<pre> 标记以打开和关闭我的输出文件...因为它现在在text/html 中,所以<pre> 标签不会显示为<pre>

    这不是我例外的,但它有效。所以我之前的脚本就变成了:

    #!/bin/bash
    
    SENDMAIL_BIN='/usr/sbin/sendmail'
    FROM_MAIL_ADDRESS='noreply@plop.com'
    FROM_MAIL_DISLAY='Test format mail'
    RECIPIENT_ADDRESSES='me@plop.com'
    
    MAIL_CMD="$SENDMAIL_BIN -f $FROM_MAIL_ADDRESS -F \"$FROM_MAIL_DISLAY\" $RECIPIENT_ADDRESSES"
    (echo "Subject: Test format";echo -e "MIME-Version: 1.0\nContent-Type: text/html;\n" && echo '<pre>' && cat output.txt && echo '</pre>') | eval $MAIL_CMD
    

    【讨论】:

      【解决方案2】:

      尝试删除内容类型上多余的分号:

      echo -e "MIME-Version: 1.0\nContent-Type: text/plain\n\n"

      另外,使用数组比使用 eval 解析字符串更好:

      #!/bin/bash
      
      SENDMAIL_BIN='/usr/sbin/sendmail'
      FROM_MAIL_ADDRESS='noreply@plop.com'
      FROM_MAIL_DISLAY='Test format mail'
      RECIPIENT_ADDRESSES='me@plop.com'
      
      MAIL_CMD=("$SENDMAIL_BIN" -f "$FROM_MAIL_ADDRESS" -F "$FROM_MAIL_DISLAY" "$RECIPIENT_ADDRESSES")
      (echo "Subject: Test format";echo -e "MIME-Version: 1.0\nContent-Type: text/plain\n\n" && cat output.txt) | "${MAIL_CMD[@]}"
      

      【讨论】:

      • 你说得对,我忘了删除分号,但即使有你的建议,我也得到了完全相同的行为:(
      • 还可以尝试只使用一个 \n,因为在标题和正文或内容之间只需要一个空格(两个换行符):text/plain\n"。 echo 已经产生了一个换行符,所以有两个 \n 会得到 3。
      • 仍然有同样的行为......我不明白为什么我不能重写它
      • 其他标题是否正常显示?您是否尝试在内容类型之后添加另一个假标题? (据我所知,您的电子邮件阅读器会默默地忽略任何它无法理解的标题。)
      • 是的,其他标题都可以(例如主题正确显示)。如果我有一个像 Plop: mytest 这样的假标题,我会在 original 中看到它!我真的不明白该怎么做
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2022-10-17
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      相关资源
      最近更新 更多