Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Utf 8 在postfix sendmail(在控制台上发送邮件)中处理umlauts(非ASCII字符) 我写了一个C++应用程序,需要发送电子邮件。_Utf 8_Smtp_Sendmail_Postfix Mta_Diacritics - Fatal编程技术网

Utf 8 在postfix sendmail(在控制台上发送邮件)中处理umlauts(非ASCII字符) 我写了一个C++应用程序,需要发送电子邮件。

Utf 8 在postfix sendmail(在控制台上发送邮件)中处理umlauts(非ASCII字符) 我写了一个C++应用程序,需要发送电子邮件。,utf-8,smtp,sendmail,postfix-mta,diacritics,Utf 8,Smtp,Sendmail,Postfix Mta,Diacritics,它通过打电话来做到这一点 /usr/sbin/sendmail -f [sender] -t 然后将邮件头和正文写入sendmail进程的标准输入 除了umlauts或其他非ASCII字符外,所有操作都正常。 我怎样才能使它们正常工作 我已经试过了 Content-Type: plain-text; charset=ISO-8859-1 作为邮件头和 Content-Type: plain-text; charset=UTF-8 没有改变任何事情。此标题似乎已被忽略。电子邮件中除ASC

它通过打电话来做到这一点

/usr/sbin/sendmail -f [sender] -t
然后将邮件头和正文写入sendmail进程的标准输入

除了umlauts或其他非ASCII字符外,所有操作都正常。 我怎样才能使它们正常工作

我已经试过了

Content-Type: plain-text; charset=ISO-8859-1  
作为邮件头和

Content-Type: plain-text; charset=UTF-8

没有改变任何事情。此标题似乎已被忽略。

电子邮件中除ASCII以外的任何内容通常应编码为或。然后相应地设置
内容传输编码
内容类型
标题,以便收件人知道如何将邮件解码回非ASCII文本

下面是一个bash示例,演示了如何在命令行上执行此操作:

#!/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"
#/bin/bash
message=“Hellöümläüts”

encoded=$(base64在回答这个问题之后,我编写了一个bash函数来向收件人发送电子邮件。该函数发送utf-8编码的邮件,并通过base64编码处理主题和内容中的utf-8字符

要发送纯文本电子邮件,请执行以下操作:

send_email "plain" "from@domain.com" "subject" "contents" "to@domain.com" "to2@domain.com" "to3@domain.com" ...
要发送HTML电子邮件,请执行以下操作:

send_email "html" "from@domain.com" "subject" "contents" "to@domain.com" "to2@domain.com" "to3@domain.com" ...
这是函数代码

# 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()
#向收件人发送电子邮件。
#
#@param string$content_type电子邮件内容mime类型:“html”或“plain”。
#@param string$来自_地址发件人电子邮件。
#@param string$subject电子邮件主题。
#@param string$contents电子邮件内容。
#@param array$recipients电子邮件收件人。
函数send_email(){
[${}-lt 5]&&退出1
本地内容类型=“${1}”
本地自_地址=“${2}”
本地主题=“${3}”
本地内容=“${4}”
#删除除收件人以外的所有参数。
第四班

local encoded_contents=“$(base64如果要使用带引号的可打印内容对邮件进行编码(并且不使用bse64传输编码),内容类型应该是什么?这有意义吗?@James在这种情况下,您不需要更改
内容类型
,但
内容传输编码
需要更改为
引用可打印