我通過Gmail發送自己是一箇中國的電子郵件,我用下面的標題 Java郵件:設置編碼中國
當我通過javax.mail發送電子郵件中國出現在我的郵件瀏覽器如下收到了成功
我的代碼如下:
個public boolean send() throws TestReportingException, MessagingException
{
try
{
String encodingOptions = "text/plain; charset=UTF-8";
Authenticator authenticator = new Authenticator()
{
// override the getPasswordAuthentication method
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username, password);
}
};
// Create the mail session
Session session = Session.getInstance(maileProperties, authenticator);
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setHeader("Content-Type", encodingOptions);
// Set From: header field of the header.
mimeMessage.setFrom(new InternetAddress(from, fromName));
// Set To: header field of the header.
for (String s : toList)
{
if (null == s)
{
throw new TestReportingException("Email address is null");
}
mimeMessage.addRecipients(Message.RecipientType.TO, InternetAddress.parse(s));
}
for (String s : ccList)
{
mimeMessage.addRecipients(Message.RecipientType.CC, InternetAddress.parse(s));
}
// Set Subject: header field
mimeMessage.setSubject(subject,"UTF-8");
// Create the message part
//MimeBodyPart messageBodyPart = new MimeBodyPart();
// messageBodyPart.setContent(message, encodingOptions);
// Create the message part
MimeBodyPart messageBodyPart = new MimeBodyPart();
mimeMessage.setHeader("Content-Type", encodingOptions);
// Now set the actual message
messageBodyPart.setText(message, "utf-8", "plain");
// Now set the actual message
//messageBodyPart.setText(message, "utf-8", "html");
Multipart multipart = new MimeMultipart();
// Set text message part
multipart.addBodyPart(messageBodyPart);
// Part two is attachment
if (null != attachmentSource)
{
messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(new DataHandler(attachmentSource));
messageBodyPart.setFileName(attachmentSource.getName());
multipart.addBodyPart(messageBodyPart);
}
// Send the complete message parts
mimeMessage.setContent(multipart);
// Send message
//Transport.send(mimeMessage);
SSm.getLogger().debug("Subject: "+mimeMessage.getSubject());
Transport.send(mimeMessage);
SSm.getLogger().info("\n\nSent message successfully....");
clear();
return true;
}
catch (MessagingException mex)
{
SSm.getLogger().error(mex.getMessage());
throw mex;
}
catch (Exception e)
{
SSm.getLogger().error(e.getMessage(), e);
throw new TestReportingException(e.getMessage(), e);
}
}
屬性是:
- 主機= smtp.gmail.com
- mail.smtp.auth =真
- mail.smtp.starttls.enable =真mail.smtp.host = SMTP .gmail.com
- mail.smtp.port = 587 mail.mime.charset = UTF-8
NOTES: 文本在發送前未被破壞。 message.getSubject()打印出清潔中國文字 我猜東西是錯誤的,我做了編碼
編輯
這裏的方式是調試輸出:
DEBUG:setDebug: JavaMail的版本1.5.5
DEBUG:getProvider()返回javax.mail.Provider [TRANSPORT,SMTP,com.sun.mail.smtp.SMTPTransport,甲骨文]
DEBUG SMTP:用於身份驗證需要用戶名和密碼
DEBUG SMTP:useEhlo真,useAuth真正
DEBUG SMTP:試圖連接到主機 「smtp.gmail.com」,端口587,isSSL假
220 smtp.gmail.com ESMTP s20sm18171725pfg.11 - gsmtp
DEBUG SMTP:連接到主機 「smtp.gmail.com」,端口:587
>
EHLO傑克 - yoga3.hitronhub.home
250-smtp.gmail.com爲您服務,[96.49.181。179]
250-SIZE 35882577
250-8BITMIME
250 STARTTLS
250 ENHANCEDSTATUSCODES
250 PIPELINING
250 CHUNKING
250 SMTPUTF8
DEBUG SMTP:實測延伸 「SIZE」,則arg 「35882577」
DEBUG SMTP:實測延伸 「8BITMIME」,則arg 「」
DEBUG SMTP:實測延伸 「STARTTLS」,則arg 「」
DEBUG SMTP:實測延伸 「ENHANCEDSTATUSCODES」,則arg 「」
DEBUG SMTP:實測延伸 「流水線」,則arg 「」
DEBUG SMTP:實測延伸 「CHUNKING」,則arg 「」
DEBUG SMTP:實測延伸 「SMTPUTF8」,則arg 「」
STARTTLS
220 2.0.0準備好開始TLS
EHLO傑克-yoga3.hitronhub.home
250 -smtp.gmail.com爲您服務,[96.49.181。179]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250 ENHANCEDSTATUSCODES
250 PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP:實測延伸 「SIZE」,則arg 「35882577」
DEBUG SMTP:實測延伸 「8BITMIME」,則arg 「」
DEBUG SMTP:實測延伸 「AUTH」,ARG 「LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH」
DEBUG SMTP:實測延伸 「ENHANCEDSTATUSCODES」,則arg 「」
DEBUG SMTP:實測延伸 「流水線」,則arg 「」
DEBUG SMTP:實測延伸 「CHUNKING」,則arg 「」
DEBUG SMTP:實測延伸 「SMTPUTF8」,則arg 「」
DEBUG SMTP:嘗試使用的機制來驗證:LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2
DEBUG SMTP:使用機構LOGIN
DEBUG SMTP:AUTH LOGIN命令跟蹤受抑制
DEBUG SMTP:AUTH LOGIN成功
DEBUG SMTP:use8bit假
MAIL FROM:
250 2.1.0 OK s20sm18171725pfg.11 - gsmtp
RCPT TO:
250 2.1.5 OK s20sm18171725pfg.11 - gsmtp
DEBUG SMTP:驗證地址
DEBUG SMTP:JSTONE @ I- KODA.COM
DATA
354繼續s20sm18171725pfg.11 - gsmtp
來源:iKoda報告
消息ID:< [email protected]>
Subject:=?UTF-8?B?QnZ4Y2Igw6TCuMKtIMOkwrjCrSDDpMK4wq0gw6TCuMKtIMOkwrjCrQ ==?=
MIME-版本:1.0
內容類型:多部分/混合;
boundary="----=_Part_0_1855484302.1488002481637"
>
------ = _ Part_0_1855484302.1488002481637
內容類型:文本/無格式;字符集= UTF-8
內容傳送編碼:BASE64
>
RGVhciBaeGN2LA0KDQpCdnhjYiDDpMK4wq0gw6TCuMKtIMOkwrjCrSDDpMK4wq0gw6TCuMKtw6TC
uMKtIMOkwrjCrSDDpMK4wq0gw6TCuMKtIMOkwrjCrWh0dHBzOi8vd3d3Lmkta29kYS5jb20vZGVs
aXZlcnkvZHNmcj91ZnQ9MTAxMjc3MCZjPTEwMTI3NjTDpMK4wq0gw6TCuMKtIMOkwrjCr SDDpMK4
wq0gw6TCuMKt
------ = _ Part_0_1855484302.1488002481637--
。
250 2.0.0 OK 1488002489 s20sm18171725pfg.11 - gsmtp
DEBUG SMTP:郵件成功發送至郵件服務器
退出
221 2.0.0關閉連接s20sm18171725pfg.11 - gsmtp
[INFO]「jake.app」com.ikoda.service.utilities.EmailOut.send(EmailOut.java:256)01:27:01
>
已成功發送消息....
>
首先,修復這些[常見的JavaMail錯誤](http://www.oracle.com/technetwork/java/javamail/faq/index.html#commonmistakes)。 你從[這個其他職位](http://stackoverflow.com/questions/42447635/javax-mail-utf-8-encoding-issue)複製你的代碼?即使這些評論也非常相似。 你使用的是什麼版本的JavaMail? [JavaMail調試輸出](http://www.oracle.com/technetwork/java/javamail/faq/index.html#debug)顯示什麼? –
是的,我轉發了另一個職位在其中有一個重大的人爲錯誤。我沒有看到任何常見的錯誤,驗證者可能不是理想的,但它的工作原理。 我會看看javamail日誌。感謝提示 – Jake
人爲錯誤是什麼?並修復Session.getDefaultInstance。 「它有效」與「它是正確的」不一樣。這些都不是你的問題的原因,但這就是爲什麼我想看到JavaMail調試輸出。 –