2016-05-28 13 views
2

Der folgende Code soll E-Mail über gmail senden, aber es gibt die folgende Fehlermeldung:Java senden E-Mail über gmail

enter image description here

Auf meinem Google Mail-Konto erhalte ich eine Nachricht, die ein Zeichen verhindert wurde und ich sollte eine sichere App wie Gmail verwenden, um auf mein Konto zuzugreifen. Der Quellcode lautet wie folgt:

public void doSendMail(){ 
    username = txtFrom.getText(); 
    password= new String(txtPassword.getPassword()); 
    to = txtTo.getText(); 
    subject = txtSubject.getText(); 
    email_body = jTextArea1.getText(); 

    Properties props = new Properties(); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.socketFactory.port", "587"); 
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.port", "587"); 

    Session session = Session.getDefaultInstance(props, 
      new javax.mail.Authenticator(){ 
       @Override 
       protected PasswordAuthentication getPasswordAuthentication(){ 
        return new PasswordAuthentication(username, password); 
       } 
    } 
    ); 
    try { 
     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(username)); 
     message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to)); 
     message.setSubject(subject); 
     message.setText(email_body); 
     Transport.send(message); 

     JOptionPane.showMessageDialog(this, "Message Sent!","Sent",JOptionPane.INFORMATION_MESSAGE); 

    } catch (Exception e) { 
     JOptionPane.showMessageDialog(this, e.toString()); 
    } 
} 

Was kann ich mit dem Code tun, damit er E-Mails über Google Mail sendet?

+0

Könnten Sie den Text der Fehlermeldungen posten, die kopiert werden können? –

+0

http://stackoverflow.com/questions/37051208/javamail-works-with-jboss-application-server-7-but-not-working-with-tomcat7-on-o/37051787#37051787 – Gangaraju

+0

Ich setze den Fehler gefangen Probieren Sie ... catch block, um in einem Nachrichtendialog angezeigt zu werden. Ich glaube, der Fehler wird in dem Nachrichtendialog angezeigt, den ich gepostet habe – David

Antwort

3

Ihr Quellcode eignet sich perfekt zum Senden von E-Mails über Google Mail. Möglicherweise müssen Sie Ihrem Konto für weniger sicheren Zugriff über https://www.google.com/settings/security/lesssecureapps

erlauben Hier ist Ihr Code. Ich habe sehr wenig Änderungen vorgenommen, um als eigenständiges Programm zu laufen. Es erfordert zwei Gläser: 1) E-Mail-1.4.7.jar und 2) aktivierungs 1.1.1.jar

import java.util.Properties; 
import java.util.Scanner; 
import javax.mail.Message; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 
import javax.swing.JOptionPane; 

/** 
* Following jar are required: 
* 1) mail-1.4.7.jar from http://central.maven.org/maven2/javax/mail/mail/1.4.7/mail-1.4.7.jar 
* 2) activation-1.1.1.jar from http://central.maven.org/maven2/javax/activation/activation/1.1.1/activation-1.1.1.jar 
* 
*/ 
public class Test { 

    public static void main(String args[]) { 
     Scanner sc = new Scanner(System.in); 
     System.out.print("gmail username: "); 
     String username = sc.next(); 
     System.out.print("gmail password: "); 
     String password = sc.next(); 
     System.out.print("destination email address: "); 
     String to = sc.next(); 
     System.out.print("subject: "); 
     String subject = sc.next(); 
     System.out.print("email body: "); 
     String email_body = sc.next(); 
     Test test = new Test(); 
     test.doSendMail(username, password, to, subject, email_body); 
     sc.close(); 

    } 
    // sends mail 
    public void doSendMail(final String username, final String password, String to, String subject, String email_body) { 

     Properties props = new Properties(); 
     props.put("mail.smtp.host", "smtp.gmail.com"); 
     props.put("mail.smtp.socketFactory.port", "587"); 
     props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.port", "587"); 

     Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { 
      @Override 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication(username, password); 
      } 
     }); 
     try { 
      Message message = new MimeMessage(session); 
      message.setFrom(new InternetAddress(username)); 
      message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); 
      message.setSubject(subject); 
      message.setText(email_body); 
      Transport.send(message); 
      System.out.println("message sent"); 
      JOptionPane.showMessageDialog(null, "Message Sent!", "Sent", JOptionPane.INFORMATION_MESSAGE); 
     } catch (Exception e) { 
      System.out.println(e); 
      JOptionPane.showMessageDialog(null, e.toString()); 
     } 
    } 
} 
+0

Ich neige dazu zu denken, dass das das Problem sein könnte, aber was macht die Aktivierung-1.1.1.jar? – David

+0

Ich verwendete javax.swing.mail.jar Version 1.5.5 – David

+1

Wurde nach dem Einschalten weniger sichere Anwendungen gearbeitet. Danke @Sanjeev Saha – David

0

für mich arbeitet diese Eigenschaften mit:

props.put("mail.smtp.host", "smtp.gmail.com"); 
props.put("mail.smtp.socketFactory.port", "465"); 
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.port", "465"); 

Hoffe, es hilft.

+0

habe die gleiche Nachricht OscarBcn – David

+0

hast du das aktiviert? https://www.google.com/settings/security/lesssecureapps – OscarBcn

+0

Ich tat das und es funktionierte, das war eigentlich das Problem, änderte nicht meinen Quellcode – David

0

Try This:

import java.util.Properties; 
import javax.mail.*; 
import javax.mail.internet.*; 

public class SendMailSSL { 

    public static void main(String[] args) { 

     String to = "krishna14581[email protected]";//change accordingly 

     //Get the session object 
     Properties props = new Properties(); 
     props.put("mail.smtp.host", "smtp.gmail.com"); 
     props.put("mail.smtp.socketFactory.port", "465"); 
     props.put("mail.smtp.socketFactory.class", 
       "javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.port", "465"); 

     Session session = Session.getDefaultInstance(props, 
       new javax.mail.Authenticator() { 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("[email protected]", "password");//change accordingly 
      } 
     }); 

     //compose message 
     try { 
      MimeMessage message = new MimeMessage(session); 
      message.setFrom(new InternetAddress("[email protected]"));//change accordingly 
      message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
      message.setSubject("Hello"); 
      message.setText("Testing......."); 

      //send message 
      Transport.send(message); 

      System.out.println("message sent successfully"); 

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

    } 
} 
+0

bekam die gleiche Nachricht, aber es funktioniert für Yahoo, wenn Sie die Hos ändern zu "smtp.mail.yahoo.com". – David

+0

versuchen Sie "smtp-relay.gmail.com" als Host. –

+0

Ich habe den Zugriff für weniger sichere Anwendungen auf Google eingeschaltet und es hat gut funktioniert. Keine Notwendigkeit, den Code zu ändern – David