2012-12-01 29 views
6

İstediğim şeye setFrom() yöntemini nasıl değiştiririm? E-postalarımı gmail hesabım aracılığıyla gönderebilir ve setFrom metnini değiştirebilirim, ancak e-posta için username'u gösterir. Yahoo hesabımı kullanmayı denedim ve bir kimlik doğrulama hatası alıyorum.Javamail API - setFrom'u istediğiniz gibi nasıl değiştirirsiniz?

Adresinden adresini değiştirmek istiyorum. kod aşağıdaki gibidir:

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'ın rölesini kullanmayın? – Perception

+2

Arkadaşım, postanızı göndermek için Googles rölesini kullanıyorsunuz ('props.put (" mail.smtp.host "," smtp.gmail.com ");'). Kullanıcı adının adres olarak görüntülendiğini daha az sıkı bir şekilde uygulamak istiyorsanız başka bir röle kullanın. – Perception

+0

Yapmaya çalıştığınız şey genellikle "spam" olarak adlandırılır. :-) Bu yüzden Gmail bunu yapmanıza izin vermiyor. Bunu yapmak için geçerli bir nedeniniz olduğunu varsayalım, bu Gmail yardım sayfasına bakın: [Farklı bir adresten posta gönderme] (https://support.google.com/mail/bin/answer.py?hl=tr&answer=22370) –

cevap

0

Birçok saygın SMTP röleleri sahte kimlik (yani daha da kolay spam hizmeti kötüye için yapar) sizi izin vermeyecektir. Bunun amacı, hedefiniz gelen kutunuzdaki daha fazla postayı önlemekse, Google allows you to modify your email address numaralı e-postayı yanıtlamaksa, e-postanıza yanıtları filtreleyebilirsiniz.

-2

Tüm kod burada Aşağıdaki kodu kullanabilirsiniz. "Smtp.gmail.com" kullanırken Bu benim

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

karşılaşan Aynı sorun için İnce çalışıyor. Mandrill'i kullan, işe yarayacak. Bir Mandrill hesabı kurduktan sonra, 587 numaralı bağlantı noktasından "smtp.mandrillapp.com" adresini kullanın. Kimlik Doğrulaması için, kullanıcı adı ayarlayın = mandrill kullanıcı adınız ve şifreniz = hesabınızda oluşturulan API anahtarı.

0

(Amacınızı anladığımı ve spam göndermediğimi varsayarsak) Kullanmakta olduğumuz Apache Commons kitaplığı, numaralı telefondan setPersonal numaralı telefonu arayarak yapar. http://docs.oracle.com/javaee/7/api/javax/mail/internet/InternetAddress.html#setPersonal-java.lang.String-java.lang.String-

 Message message = new MimeMessage(session); 
     InternetAddress me = new InternetAddress("[email protected]"); 
     me.setPersonal("My name"); 
     message.setFrom(me); 
İlgili konular