2015-09-30 56 views
2

我想用非英語電子郵件ID(例如डेमो@डेमो.कॉम)將電子郵件發送到使用java的任何電子郵件ID 。如何用Java中的非英文發件人ID發送電子郵件?

當我使用:

String to = "[email protected]"; 
String from = "डेमो@डेमो.कॉम"; 

     String host = "localhost"; 

     Properties properties = System.getProperties(); 
      properties.setProperty("mail.smtp.host", host); 

     Session session = Session.getDefaultInstance(properties); 

     try{ 
     // Create a default MimeMessage object. 
     MimeMessage message = new MimeMessage(session); 

     message.setFrom(new InternetAddress(from)); 


     message.addRecipient(Message.RecipientType.TO, 
            new InternetAddress(to)); 

     message.setSubject("This is the Subject Line!"); 

     // Now set the actual message 
     message.setText("This is actual message"); 

     Transport.send(message); 
     System.out.println("Sent message successfully...."); 
     }catch (MessagingException mex) { 
     mex.printStackTrace(); 
     } 

它拋出異常,如:

javax.mail.SendFailedException: Sending failed; 
    nested exception is: 
    class javax.mail.MessagingException: 501 Syntax error in parameters or arguments 

    at javax.mail.Transport.send0(Transport.java:218) 
    at javax.mail.Transport.send(Transport.java:80) 
    at com.data.TestingSendMail.main(TestingSendMail.java:49) 

請建議我什麼,我需要爲它做。

+1

嘗試'message.setHeader(「Content-Type的「,」text/plain; charset = UTF-8「);' – silentprogrammer

+0

@singhakash它不能工作 – GeekOnJava

回答

0

你應該做的就是添加了編碼格式:

String to = "[email protected]"; 
String from = "डेमो@डेमो.कॉम"; 

String host = "localhost"; 

Properties properties = System.getProperties(); 
    properties.setProperty("mail.smtp.host", host); 

Session session = Session.getDefaultInstance(properties); 

try{ 
    // Create a default MimeMessage object. 
    MimeMessage message = new MimeMessage(session); 

    message.setFrom(new InternetAddress(from)); 


    message.addRecipient(Message.RecipientType.TO, 
          new InternetAddress(to)); 

    message.setSubject("This is the Subject Line!"); 

    message.setText("This is actual message","UTF-8"); 

    Transport.send(message); 
    System.out.println("Sent message successfully...."); 
}catch (MessagingException mex) { 
    mex.printStackTrace(); 
} 

當您在.setText方法來設置編碼還告訴標題編碼。

+0

你也可以檢查[這篇文章](http://stackoverflow.com/questions/15044027/utf-8-charset -doesnt-work-with-javax-mail)和[另一篇文章](http://www.coderanch.com/t/603839/java/java/sending-english-characters-Java-Mail) –

+0

我知道UTF-8爲setText()工作,但它用於非英文正文消息。而我的問題是,發件人的電子郵件ID是使用印地語或任何其他非英語語言。 – GeekOnJava

+0

如果您有興趣使用此支持測試JavaMail 1.6.0的版本,請通過[email protected]與我聯繫。 –

0

首先你需要一個完整的地址(包括域名部分)。如果您的域名也包含國際字符,則需要使用java.net.IDN.toASCII像這樣把它 轉換爲Punycode:

String[] emailSplit = from.split("@"); 
String local = emailSplit[0]; 
String domain = emailSplit[1]; 
String punycodeDomain = java.net.IDN.toASCII(domain); 
String newEmail = local + "@" + punycodeDomain; 

(簡化版,檢查所需的一些錯誤)

+0

它顯示相同的錯誤。:501參數或參數中的語法錯誤 – GeekOnJava

+0

仔細看看你的地址不完整,它不包含「@」字符。我的回答假設你使用國際域名。 – Drunix