【问题标题】:How to insert new line in the email using linux mail command? [duplicate]如何使用 linux mail 命令在电子邮件中插入新行? [复制]
【发布时间】:2023-03-19 21:16:01
【问题描述】:

如何使用 linux mail 命令在邮件中插入新行?

echo "Hi xxx, would you tell me something?\\n thanks!\\n -xxx" | mail -s "subject" xxx@gmail.com

电子邮件显示文字'\n',而不是换行符,如何解决?

【问题讨论】:

  • SMTP 使用 CRLF 行尾,而不是单独使用 CR 和单独使用 LF。事实上,RFC 明确规定您不得发送单独的 CR 或单独的 LF。此外,消息应该以两个 CRLF 结尾,而不是一个。另请参阅RFC 5321,第 2.3.8 节,
  • @jww 正如在别处已经讨论过的,mailmailx 会为您处理这些问题。在这种特殊情况下,您不需要知道或关心 SMTP 需要什么。

标签: linux email newline


【解决方案1】:

尝试使用echo -e

echo -e "Hello \n World"

您可以在命令行中输入man echo 阅读更多内容。

【讨论】:

  • echo -e 易碎且便携性差。你应该更喜欢printf;它还简化了这个特定的用例,因为您可以方便地将行拆分为单独的字符串参数。
  • 我从没想过我会搜索 echo 的选项,但我们到了。甚至 echo 也有选项(因为它当然可以:D)
【解决方案2】:

使用mailx,如果您将电子邮件发送给 Outlook 用户,您可以在每行的开头添加 2 个空格。

{ echo "Hi xxx, would you tell me something" ; echo "thanks!" ; echo "-xxx" } | sed 's/^/  /g' | mailx -s "subject" xxx@domain.com

【讨论】:

  • 是的 Outlook 很痛苦,但这是现实生活。对我来说效果很好。
【解决方案3】:

使用邮件命令时接受的答案对我不起作用,我必须使用

\r

我的整个命令是

mail -s "SUBJECT" -aFrom:"from@sdf.com "to@sdfd.com" <<< $( echo -e "Line1\rLine2")

【讨论】:

  • 当我尝试使用 \r 时,整个电子邮件正文看起来像 Gmail 的附件。
【解决方案4】:

使用 Bash 3.2 在 MacOS 上测试

bash-3.2$ mail -s "$subject" TestEmail@gmail.com <<< $(printf "%s\r\n%s\n" "This is Line One"  "This is Line Two")

这是收到的电子邮件的 gmail 屏幕截图

【讨论】:

  • 虽然这可行,但如果您使用单独的进程来生成字符串,则此处的字符串是多余的。 printf '%s\n' 'This is line one' 'This is line two' | mail -s "$subject"
  • 有关在接收端专门为 Outlook 用户解决此问题的方法,请参阅serverfault.com/a/1083188/34013
【解决方案5】:

我遇到了这个问题,并通过用引号将我输入mailx的变量括起来解决了这个问题。

我从 ps 的进程列表开始,即list="$(ps |grep some_process)"

然后,当我尝试按如下方式将其邮寄出去时,换行符被删除了:

echo $body | mailx -s "${subject}" recipient@someplace.com

但是,只需将 $body 用引号括起来就可以保留换行符:

echo "$body" | mailx -s "${subject}" recipient@someplace.com

【讨论】:

    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2010-10-28
    • 2018-06-21
    • 2019-12-16
    • 2015-03-19
    相关资源
    最近更新 更多