首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理postfix sendmail中的变音(非ASCII字符)(在控制台上发送邮件)

处理postfix sendmail中的变音(非ASCII字符)(在控制台上发送邮件)
EN

Stack Overflow用户
提问于 2011-11-23 07:07:09
回答 2查看 8.1K关注 0票数 3

我编写了一个需要发送电子邮件的C++应用程序。

它通过调用

代码语言:javascript
复制
/usr/sbin/sendmail -f [sender] -t

然后将邮件头和正文写入sendmail流程的标准输入。

一切正常-除了变音或其他非ASCII字符。我怎样才能让它们正常工作?

我已经试过设置

代码语言:javascript
复制
Content-Type: plain-text; charset=ISO-8859-1  

作为邮件头,并且还

代码语言:javascript
复制
Content-Type: plain-text; charset=UTF-8

什么都没改变。这个头似乎被忽略了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-09 13:20:18

电子邮件中除ASCII码以外的任何内容通常都应编码为quoted-printablebase64。然后,相应地设置Content-Transfer-EncodingContent-Type标头,以便收件人知道如何将消息解码回非ASCII码文本。

下面是一个bash示例,它说明了如何在命令行上完成此操作:

代码语言:javascript
复制
#!/bin/bash
message="Hellö ümläüts"
encoded=$(base64 <<< "$message")

/usr/sbin/sendmail -t <<< "From: sender@example.com
To: recipient@example.com
Subject: Dear friend
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"

$encoded"

在对数据进行base64编码之前,您需要指定用于将字符串转换为二进制的任何字符编码。

本例使用utf-8,因为这是一种常见的平台默认值,所以大多数shell在将字符串转换为二进制并将其传递给标准输入上的base64时都会使用utf-8。

票数 5
EN

Stack Overflow用户

发布于 2014-02-03 19:29:44

根据这个问题的答案,我已经编写了一个bash函数来向收件人发送电子邮件。该函数发送utf-8编码的邮件,并通过执行base64编码来处理主题和内容中的utf-8字符。

发送纯文本电子邮件的步骤:

代码语言:javascript
复制
send_email "plain" "from@domain.com" "subject" "contents" "to@domain.com" "to2@domain.com" "to3@domain.com" ...

发送HTML电子邮件的步骤:

代码语言:javascript
复制
send_email "html" "from@domain.com" "subject" "contents" "to@domain.com" "to2@domain.com" "to3@domain.com" ...

下面是函数代码。

代码语言:javascript
复制
# Send a email to recipients.
#
# @param string $content_type Email content mime type: 'html' or 'plain'.
# @param string $from_address Sender email.
# @param string $subject Email subject.
# @param string $contents Email contents.
# @param array $recipients Email recipients.
function send_email() {
  [[ ${#} -lt 5 ]] && exit 1

  local content_type="${1}"
  local from_address="${2}"
  local subject="${3}"
  local contents="${4}"

  # Remove all args but recipients.
  shift 4

  local encoded_contents="$(base64 <<< "${contents}")"
  local encoded_subject="=?utf-8?B?$(base64 --wrap=0 <<< "${subject}")?="

  for recipient in ${@}; do
    if [[ -n "${recipient}" ]]; then
    sendmail -f "${from_address}" "${recipient}" \
        <<< "Subject: ${encoded_subject}
MIME-Version: 1.0
From: ${from_address}
To: ${recipient}
Content-Type: text/${content_type}; charset=\"utf-8\"
Content-Transfer-Encoding: base64
Content-Disposition: inline

${encoded_contents}"
    fi
  done

  return 0
} # send_message()

希望这能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8235182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档