我发送的邮件人家怎么看着是乱码??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我发送的邮件人家怎么看着是乱码??相关的知识,希望对你有一定的参考价值。

参考技术A 分类: 电脑/网络 >> 互联网
问题描述:

我用的是foxmail 6.0邮件服务器是163的给别人发邮件,一开始也没什么问题,偶尔有几次出现乱码,但对方也换了foxmail后就老是出现乱码的现象!这是怎么回事呀???

解析:

为何产生乱码

---- 造成邮件乱码的原因很多,但归纳起来不外乎有3种情况。

---- 第1种是由操作系统和使用的软件设置不同导致而成。如用英文操作系统而不加挂中文系统接收中文邮件,接收到的肯定是一堆乱码。我们使用的客户端软件品种多样,而且用户设置习惯各有不同,收到邮件后系统不识其编码方法,无法解码,只能是乱码一堆。

---- 第2种是发送邮件时因发送程序采用不同的编码标准所致。如UU、MIME和BINHEX等。若用户所用的操作系统程序没有能力将其解码,收到的邮件就会像“天书”一般令人费解。

---- 第3种是邮件传输服务器的原因。一封邮件从发送到接收不知要经过多少邮件服务器主机,而其中有的主机(特别是国外的)不支持非ASCII码,将中文双字节或二进制格式邮件中每个字符的第8位过滤掉,使该信息与初始信息截然不同,造成邮件信息失真或损坏。

怎样巧解乱码

---- 当用户收到乱码邮件后,如果让对方重发一次,既浪费时间,又影响交流,不如通过尝试以下方法一步一步自行解码(本文仅以使用最广泛的Outlook Express为例)。

---- 通常情况下,邮件设置不同导致邮件乱码情况居多。这时,选择乱码邮件后,单击“查看”*“编码”*“简体中文(GB2312)”或“其他”*“简体中文(HZ)”(如图1所示)。若仍显示乱码,可试着将乱码邮件转寄到自己的邮箱中,然后用Outlook Express接收并解码。若还不行,可将邮件存成一个后缀名为.eml的文件,由Outlook Express打开,一般可以自动解码。

图1

---- 对于采用不同编码标准产生的乱码邮件,我们可以在选择乱码邮件后,右键单击鼠标,在弹出的快捷菜单中选择“属性”(如图2所示),接着在出现的对话框中单击“详细资料”,再单击“邮件源文件”,这时就会打开邮件源文件码,邮件内容显现(如图3所示)。

图2

图3

---- 如果问题仍得不到解决,接上一步操作,右键单击,选“复制”,将“邮件源文件”拷贝到系统的剪贴板上,然后用记事本将其保存为.txt纯文本文件。接下来用资源管理器将其改名为以.uue为后缀的文件并运行,这时如果系统中装有WinZip等支持UU格式解码的工具,系统会自动调用它们解码乱码邮件,进而正确显示邮件。

---- 很多的邮件编辑软件以字符为单位处理文本,双字节的汉字被删除一半后,剩余部分会和相邻的汉字重新组合,使得文本面目全非。这时我们需要将乱码邮件存成一个文本文件,然后使用以字符为单位的编辑软件,将乱码行的第一个字符删除,后面的部分就会和相邻的乱码重新组成可识别的汉字。

---- 如果以上方法均不能奏效,则可以判断收到的乱码邮件未经过编码造成第8位字节滤掉而成为无法还原的死乱码文档,只好请对方重发邮件给用户了。

如何避免乱码现象

---- 避免乱码邮件出现有4种办法。

---- 1.发测试信。特别是我们在向国外发送重要信息时,为了确认对方接收效果,证实一下是否无须编码即可发送正文。

---- 2.养成用附件发送邮件的习惯。 绝大多数邮件软件通常可以对附件内容(尤其是非标准ASCII码格式)进行自动编码,发送中文信件,附件方式可谓是首选方法。

---- 3.为确保万无一失,发送邮件前将邮件按7位格式进行编码。方法是在邮件客户端软件中的“书写(撰写)”选项中设定默认自动为7位编码。

---- 4.尽量选择优秀的E-mail软件。

使用 javamail api 发送的 html 电子邮件正文在 Outlook 中出现乱码

【中文标题】使用 javamail api 发送的 html 电子邮件正文在 Outlook 中出现乱码【英文标题】:html email body sent using javamail api appears garbled in outlook 【发布时间】:2017-07-21 03:37:34 【问题描述】:

我正在使用以下代码向不同域的多个用户发送邮件。

        String emailBody = "<html>Some html text goes here</html>"
    String from = "from@domain1.com"
    String bcc = "bcc@domain2.com"
    String subject = "Some subject..."
    List attachments = "Some image attachments ..."
    MimeMessage message = new MimeMessage(session);
    message.setHeader("Content-Type", "text/html; charset=UTF-16")
    message.setHeader("Accept-Language", "en-US")
    message.setHeader("Content-Language", "en-US")

    message.setFrom(new InternetAddress(from));
    message.setRecipients(Message.RecipientType.BCC,InternetAddress.parse(bcc));
    message.setSubject(subject);

    // creates message part
    MimeBodyPart messageBodyPart = new MimeBodyPart();
    messageBodyPart.setContent(emailBody, "text/html; charset=UTF-16");

    // creates multi-part
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);

    addAttachmentsToMultiPart(multipart,attachments)

    message.setContent(multipart);

    Transport.send(message);

电子邮件正文完全是英文。但是很少有域的用户会收到中文字符。当我查看body的html源代码时,我发现它有一部分是乱码。一些原始的 html 文本是完整的,文本之间的一些垃圾字符没有特定的顺序。此邮件经过“Tomcat 应用程序 -> 公司邮件服务器 -> Outlook.office365.com 服务器 -> 目标邮件服务器 -> 最终用户 Outlook 客户端”的路径。

经过一番研究,我发现这个问题可能是由于字符编码造成的。为了测试它,我尝试将此邮件发送到 gamil.com。邮件正文在 gmail 中正确显示,但我注意到在标头部分中找到了以下标头,并且整个正文部分是 base64 编码的。

Content-Type: text/html; charset="UTF-16"
Content-Transfer-Encoding: base64

我不确定“Content-Transfer-Encoding”是如何在标头上设置的,以及邮件正文在哪里进行编码。但我在最终用户邮件属性中没有看到类似的标题。我尝试将“Content-Transfer-Encoding”明确设置为“base64”、“quoted-printable”(和其他类型),但它总是被忽略,gmail 总是将它作为 base64 接收。此设置对最终用户邮件没有影响。他们总是收到相同的垃圾。

谁能帮我理解可能是什么问题以及如何解决它

【问题讨论】:

【参考方案1】:

我们的代码与您编写的非常相似,您可以尝试的唯一区别是:

我们没有在邮件中设置任何标题 我们使用稍微不同的正文内容类型 - text/html; charset=utf-8

顺便说一句,我们使用com.google.common.net.MediaType 将媒体类型传递给电子邮件发送类,因此您可以使用MediaType.toString() 来获取内容类型。

【讨论】:

【参考方案2】:

经过大量的研究和实验,我解决了。基本上有两个问题

    不应在 MimeMessage 级别设置字符集,而应在单个 MimeBodyPart 级别设置。

    将 UTF-16 更改为 UTF-8。某些电子邮件客户端/服务器无法正确处理 UTF-16,或者它们未配置为处理 UTF-16。

【讨论】:

以上是关于我发送的邮件人家怎么看着是乱码??的主要内容,如果未能解决你的问题,请参考以下文章

.Net 自带System.Net.Mail.MailMessage发送邮件乱码问题

用JAVA发送邮件,正文乱码该如何解决

Java 发送邮件是出现乱码 乱码结果如下:

收到的电子邮件正文全部都是乱码该怎么办呢?很着急

rpa imap返回邮箱乱码

在ASP.NET中用System.Web.Mail类发邮件在发送指令中出现乱码是怎么回事???