2012-12-01 19 views
6

如何將setFrom()方法更改爲我想要的任何方法?我可以通過我的Gmail郵件發送電子郵件,並更改setFrom文本,但它顯示我的電子郵件地址爲username。我曾嘗試使用我的雅虎帳戶以及我得到一個身份驗證錯誤。Javamail API - 你如何將setFrom改爲任何你想要的?

我想更改發件人地址。代碼如下:

import java.util.Properties; 

import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

public class SendMailTLS { 

    public static void main(String[] args) { 

     final String username = "[email protected]"; 
     final String password = "password"; 

     Properties props = new Properties(); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.host", "smtp.gmail.com"); 
     props.put("mail.smtp.port", "587"); 

     Session session = Session.getInstance(props, 
      new javax.mail.Authenticator() { 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(username, password); 
       } 
      } 
     ); 

     try { 

      Message message = new MimeMessage(session); 
      message.setFrom(new InternetAddress("[email protected]")); 
      message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse("[email protected]")); 
      message.setSubject("Testing Subject"); 
      message.setText("Dear Mail Crawler," 
       + "\n\n No spam to my email, please!"); 

      Transport.send(message); 

      System.out.println("Done"); 

     } catch (MessagingException e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 
+0

不使用Google的中繼? – Perception

+2

我的朋友,你正在使用谷歌中繼發送你的郵件('props.put(「mail.smtp.host」,「smtp.gmail.com」);')。如果您不想嚴格執行用戶名顯示爲發件人地址,請使用其他中繼。 – Perception

+0

你想做的事通常被稱爲「垃圾郵件」。 :-)這就是爲什麼Gmail不會讓你這樣做。假設您有這樣做的正當理由,請參閱以下Gmail幫助頁面:[從其他地址發送郵件](https://support.google.com/mail/bin/answer.py?hl=zh_CN&answer=22370) –

回答

0

許多著名SMTP中繼不會讓你到假冒你的身份(這將使其更容易對垃圾郵件發送者濫用該服務)。也就是說,如果您的目標是避免收件箱中有更多郵件,請撥打Google allows you to modify your email address,以便您可以過濾對您的電子郵件的任何回覆。

-2

以下是代碼 您可以使用下面的代碼。 這對我來說

class SendMail { 
public static void main(String[] args) { 
    System.out.println("In side main()---------------------"); 

    Properties props = new Properties(); 


    props.put("mail.smtp.host", "hostname"); 
    props.put("mail.smtp.port", "port");// 

    props.put("mail.smtp.socketFactory.port", "port"); 
    props.put("mail.smtp.socketFactory.class", 
      "javax.net.ssl.SSLSocketFactory"); 



    props.put("mail.smtp.auth", "true"); 

    Session session = Session.getDefaultInstance(props, 
      new javax.mail.Authenticator() { 

       protected PasswordAuthentication getPasswordAuthentication() { 
        System.out 
          .println("In side getPasswordAuthentication------------------And Before returning PasswordAuthentication"); 
        return new PasswordAuthentication("[email protected]", 
          "password"); 

       } 

      }); 
    System.out 
      .println("mail and password has been sent********************"); 
    try { 
     System.out 
       .println("we are in try{} block................................."); 
     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress("[email protected]")); 
     message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse("[email protected]")); 
     message.setSubject("Testing Subject"); 
     message.setText("Dear User," + "\n\n This is testing only!"); 

     Transport.send(message); 

     System.out 
       .println("Mail has been sent successfully.........................."); 

    } catch (MessagingException e) { 
     System.out.println("we are in catch block..................."); 
     e.printStackTrace(); 

    } 
} 

}

+0

http://www.oracle.com/technetwork/java/faq-135477.html#commonmistakes – BalusC

1

面對同樣的問題,做工精細,同時使用 「smtp.gmail.com」。 使用Mandrill,它會工作。 設置Mandrill帳戶後,請使用端口587上的「smtp.mandrillapp.com」。 對於驗證,在帳戶中設置username = your mandrill username和password = API密鑰。

相關問題