설정 나는 Gmail을 통해 자신을 중국의 이메일을 발송하고 나는 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 : 전송하기 전에 텍스트가 손상되지 않았습니다.
DEBUG : setDebug message.getSubject은() 내가 뭔가를 추측하고 내가 인코딩 여기
편집
을했던 방식에 문제가있는 디버그 출력의 깨끗한 중국어 텍스트를 출력합니다 : JavaMail에 버전 1.5.5
DEBUG :를 GetProvider() javax.mail.Provider [TRANSPORT, SMTP com.sun.mail.smtp.SMTPTransport 오라클]
반환디버그 SMTP : 인증 필요 사용자 이름과 암호
디버그 SMTP : useEhlo 사실, USEAUTH 사실
디버그 SMTP : "smtp.gmail.com"isSSL 거짓 포트 587를 호스트에 연결을 시도
220 smtp.gmail.com ESMTP s20sm18171725pfg.11 -
DEBUG의 SMTP를 gsmtp "smtp.gmail.com"호스트에 연결된 포트 : 587
>를,912,
EHLO 제이크-yoga3.hitronhub.home 서비스, [96.49.181에서
250-smtp.gmail.com
.179]250 SIZE 35,882,577
250-8BITMIME
250 STARTTLS
250 ENHANCEDSTATUSCODES
250 PIPELINING
250 CHUNKING
250 SMTPUTF8
디버그 SMTP : 찾을 수 확장 "SIZE"인수 "35882577"
디버그 SMTP : 찾을 수 확장 "8BITMIME"인수 ""
디버그 SMTP : 확장을 찾을 수 "STARTTLS"인수 ""
DEBUG의 SMTP : 실측치 확장자 "ENHANCEDSTATUSCODES"인수 ""
DEBUG SMTP : 실측치 확장자 "PIPELINING"인수 ""
DEBUG의 SMTP : 실측치 확장자 "CHUNKING"인수 ""
DEBUG의 SMTP : 실측치 확장자 "SMTPUTF8"인수 ""
STARTTLS
220 2.0.0 TLS
EHLO 제이크-yoga3.hitronhub.home 시작할 준비
250 -smtp.gmail.com, [96.49.181.179]
250 SIZE 35,882,577
250-8BITMIME
250 AUTH LOGIN PLAIN XOAUTH2 일반 CLIENTTOKEN OAUTHBEARER XOAUTH
250 ENHANCEDSTATUSCODES
250 PIPELINING
250-CHUNKING
,403,210 250 SMTPUTF8DEBUG SMTP : 실측치 확장자 "SIZE"인수 "35882577"
DEBUG의 SMTP : 실측치 확장자 "8BITMIME"인수 ""
DEBUG의 SMTP : 확장 발견 ","AUTH, ARG "LOGIN PLAIN XOAUTH2 일반 CLIENTTOKEN OAUTHBEARER XOAUTH"
DEBUG의 SMTP : 실측치 확장자 "ENHANCEDSTATUSCODES"인수 ""
DEBUG SMTP : 실측치 확장자 "PIPELINING"인수 ""0
DEBUG의 SMTP : 실측치 확장자 "CHUNKING"인수 ""
DEBUG SMTP : 실측치 확장자 "SMTPUTF8"인수 ""
DEBUG의 SMTP : 메커니즘을 사용하여 인증을 시도가 로그인 PLAIN DIGEST-MD5 NTLM XOAUTH2
는 는DEBUG는 SMTP : 사용기구 로그인
DEBUG SMTP
: AUTH 로그인 명령 트레이스DEBUG SMTP
억압 : AUTH 로그인이 성공한 01 gsmtp -250 2.1.5 OK s20sm18171725pfg.11 :
RCPT TO를 gsmtp -
250 2.1.0 OK s20sm18171725pfg.11 : 23,516,
DEBUG의 SMTP는 : FROM 거짓
MAIL을 use8bit
디버그 SMTP : 확인 된 주소
디버그 SMTP : JSTONE @ I- KODA.COM
데이터
(354)로 이동 앞서 s20sm18171725pfg.11 - gsmtp
에서
: iKoda 보고서사람 : [email protected]
메시지 ID : < [email protected]>
제목 :? = UTF-8 B == QnZ4Y2Igw6TCuMKtIMOkwrjCrSDDpMK4wq0gw6TCuMKtIMOkwrjCrQ?=
MIME 버전 : 1.0
Content-Type : multipart/mixed;
boundary="----=_Part_0_1855484302.1488002481637"
>
------ = _ Part_0_1855484302.1488002481637
콘텐츠 유형 : 텍스트/일반; 캐릭터 = UTF-8
콘텐츠 전송 인코딩 :베이스 64
>
>RGVhciBaeGN2LA0KDQpCdnhjYiDDpMK4wq0gw6TCuMKtIMOkwrjCrSDDpMK4wq0gw6TCuMKtw6TC
uMKtIMOkwrjCrSDDpMK4wq0gw6TCuMKtIMOkwrjCrWh0dHBzOi8vd3d3Lmkta29kYS5jb20vZGVs
aXZlcnkvZHNmcj91ZnQ9MTAxMjc3MCZjPTEwMTI3NjTDpMK4wq0gw6TCuMKtIMOkwrjCr SDDpMK4
wq0gw6TCuMKt
------ = _ Part_0_1855484302.1488002481637--
.
250 2.0.0 OK 1488002489 s20sm18171725pfg.11 - gsmtp
디버그 SMTP :
가 QUIT 성공적으로 메일 서버로 전달 메시지
221 2.0.0 폐쇄 연결 s20sm18171725pfg.11 - gsmtp
[정보] "jake.app"com.ikoda.service.utilities.EmailOut.send (EmailOut.java:256) 01:27 :
보낸 메시지를 성공적으로
은 ....
>
먼저 [common JavaMail mistakes] (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 디버그 결과를보고 싶습니다. –