Php 发送带有国际口音和特殊字符的电子邮件
我正在通过PHP mail()发送一份西班牙语时事通讯,它们带有重音和特殊字符(我将尝试在这里粘贴:á,í,é,ñ…) 对于电子邮件的HTML版本,我想我通过打印Php 发送带有国际口音和特殊字符的电子邮件,php,email,utf-8,internationalization,Php,Email,Utf 8,Internationalization,我正在通过PHP mail()发送一份西班牙语时事通讯,它们带有重音和特殊字符(我将尝试在这里粘贴:á,í,é,ñ…) 对于电子邮件的HTML版本,我想我通过打印á,和#233 但是对于纯文本版本,我想我不能把它们放进去,对吗 对于HTML和纯文本版本,最好的做法是什么? 后来,我可能不得不用更复杂的语言发送电子邮件,如希伯来语或汉语 谢谢 对于大多数默认浏览器编码设置,重音字符如á、í、é、ñ在纯文本上工作 像汉字这样的亚洲人通常会变成垃圾 是的,建议使用纯文本+HTML。如果您的电子
á代码>,和#233代码>
但是对于纯文本版本,我想我不能把它们放进去,对吗
对于HTML和纯文本版本,最好的做法是什么?
后来,我可能不得不用更复杂的语言发送电子邮件,如希伯来语或汉语
谢谢 对于大多数默认浏览器编码设置,重音字符如á、í、é、ñ在纯文本上工作
像汉字这样的亚洲人通常会变成垃圾
是的,建议使用纯文本+HTML。如果您的电子邮件内容编码为UTF-8,并且您以UTF-8发送电子邮件,那么您不必在HTML或文本部分使用任何国际字符的特殊处理。您需要使用MIME。添加邮件标题:
MIME-Version: 1.0
Content-Type: text/plain;charset=utf-8
(如果您已经在使用MIMEmultipart/alternative
将HTML和文本放在同一封邮件中,则可以将内容类型:text/plain;charset=utf-8
放在文本部分的子标题上。)
这是假设您将要发送的“国际”字符的编码是UTF-8。如果您希望满足多个国家的需求,UTF-8是整个应用程序中使用的唯一合理的编码选择,但是如果您还没有真正考虑到这一点,那么您的站点可能会默认使用西欧编码。在邮件中担心汉字之前,先检查一下你的网站和数据库中的汉字是否正常工作
脱轨:在某些地区,用UTF-8发送邮件不是最有效的。我不知道中国的情况,但在日本仍然有一些落后和荒谬的邮件系统(尤其是webmail),它们无法处理Unicode,必须使用特定于地区的编码,比如Shift-JIS。如果你专注于这些市场,你通常会不得不使用iconv来创建邮件的特殊编码版本。不愉快
现在,由于许多邮件服务器无法处理邮件正文中的非ASCII字符,因此必须对它们进行编码。您可以为此选择quoted printable或base64;对于包含ASCII字符的内容,quoted printable通常更小,可读性更强:
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable
Hello! An a-acute is =C3=A1
此格式的编码函数为。然而,您确实需要一个合理的最新PHP来获得该函数;如果没有,可以将内容传输编码设置为base64
,然后使用
最后,如果要在标题中包含非ASCII字符(例如在From
、to
或Subject
中),则有一种完全不同的语法:
Subject: =?utf-8?b?QW4gYS1hY3V0ZSBpcyDDoQ==?=
<<>代码> qw…=>代码>中间是UTF-8中的“A- Acth-IsA.”的<代码> Base64编码E/CODE > < /P>我如何确保我的电子邮件被发送为UTF-8?“完全不同的语法”是RCF2047’B编码。通常情况下,最好使用来自同一RFC的“Q”编码,因为它通常更可读(更像引用的可打印)且更短。PHPMailer同时处理这两个问题,并且通常是一种比从头开始整理编码更好的方法——这就是库的用途!