2012-12-01 7 views
6

Wie ändere ich die Methode setFrom() zu was auch immer ich will? Ich kann E-Mails über meine Google Mail-Konto senden und ändern Sie den SetFrom-Text, aber es zeigt meine username für die E-Mail. Ich habe versucht, mein yahoo Konto auch zu benutzen und ich erhalte einen Authentifizierungsfehler.Javamail API - Wie änderst du setFrom auf was auch immer du willst?

Ich möchte die von Adresse ändern. Der Code lautet wie folgt:

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

Verwenden Sie nicht Google Relais? – Perception

+2

Mein Freund, Sie verwenden Googles Relais, um Ihre E-Mail zu senden ('props.put (" mail.smtp.host "," smtp.gmail.com ");'). Verwenden Sie ein anderes Relay, wenn Sie weniger streng durchsetzen möchten, was der Benutzername als Absenderadresse anzeigt. – Perception

+0

Was Sie versuchen, wird häufig als "Spam" bezeichnet. :-) Deshalb lässt dich Gmail nicht. Angenommen, Sie haben einen legitimen Grund dafür, finden Sie auf dieser Google Mail-Hilfeseite: [Senden von E-Mails von einer anderen Adresse] (https://support.google.com/mail/bin/answer.py?hl=de&answer=22370) –

Antwort

0

Viele namhafte SMTP-Relais werden Sie nicht zulassen, dass zu fälschen Ihre Identität (das wäre es einfacher machen, auch für Spammer, den Dienst zu missbrauchen). Das heißt, wenn Ihr Ziel ist, mehr Post in Ihrem Posteingang zu vermeiden, Google allows you to modify your email address, damit Sie alle Antworten auf Ihre E-Mail filtern können.

-2

Hier ist der vollständige Code Sie können den folgenden Code verwenden. Dies funktioniert gut für mich

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

Konfrontiert Das gleiche Problem während "smtp.gmail.com" verwenden. Verwenden Sie Mandrill, es wird funktionieren. Sobald Sie ein Mandrill-Konto eingerichtet haben, verwenden Sie "smtp.mandrillapp.com" auf Port 587. Legen Sie für die Authentifizierung username = Ihren Mandrill-Benutzernamen und Passwort = API-Schlüssel in Ihrem Konto generiert.

Verwandte Themen