it-swarm.com.de

Senden Sie eine E-Mail mit java

Ich versuche eine E-Mail mit Java zu senden:

import Java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail {

   public static void main(String [] args) {

      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";

      // Sender's email ID needs to be mentioned
      String from = "[email protected]";

      // Assuming you are sending email from localhost
      String Host = "localhost";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server
      properties.setProperty("mail.smtp.Host", Host);

      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);

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

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

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

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

Ich erhalte den Fehler:

javax.mail.MessagingException: Could not connect to SMTP Host: localhost, port: 25;
  nested exception is:Java.net.ConnectException: Connection refused: connect
        at com.Sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.Java:1706)
        at com.Sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.Java:525)

Funktioniert dieser Code zum Senden von E-Mails?

108
Mohit Bansal

Der folgende Code funktioniert sehr gut mit dem Google SMTP-Server. Sie müssen Ihren Google-Nutzernamen und Ihr Google-Passwort eingeben.

import com.Sun.mail.smtp.SMTPTransport;
import Java.security.Security;
import Java.util.Date;
import Java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 *
 * @author doraemon
 */
public class GoogleMail {
    private GoogleMail() {
    }

    /**
     * Send email using GMail SMTP server.
     *
     * @param username GMail username
     * @param password GMail password
     * @param recipientEmail TO recipient
     * @param title title of the message
     * @param message message to be sent
     * @throws AddressException if the email address parse failed
     * @throws MessagingException if the connection is dead or not in the connected state or if the message is not a MimeMessage
     */
    public static void Send(final String username, final String password, String recipientEmail, String title, String message) throws AddressException, MessagingException {
        GoogleMail.Send(username, password, recipientEmail, "", title, message);
    }

    /**
     * Send email using GMail SMTP server.
     *
     * @param username GMail username
     * @param password GMail password
     * @param recipientEmail TO recipient
     * @param ccEmail CC recipient. Can be empty if there is no CC recipient
     * @param title title of the message
     * @param message message to be sent
     * @throws AddressException if the email address parse failed
     * @throws MessagingException if the connection is dead or not in the connected state or if the message is not a MimeMessage
     */
    public static void Send(final String username, final String password, String recipientEmail, String ccEmail, String title, String message) throws AddressException, MessagingException {
        Security.addProvider(new com.Sun.net.ssl.internal.ssl.Provider());
        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

        // Get a Properties object
        Properties props = System.getProperties();
        props.setProperty("mail.smtps.Host", "smtp.gmail.com");
        props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
        props.setProperty("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.port", "465");
        props.setProperty("mail.smtp.socketFactory.port", "465");
        props.setProperty("mail.smtps.auth", "true");

        /*
        If set to false, the QUIT command is sent and the connection is immediately closed. If set 
        to true (the default), causes the transport to wait for the response to the QUIT command.

        ref :   http://Java.Sun.com/products/javamail/javadocs/com/Sun/mail/smtp/package-summary.html
                http://forum.Java.Sun.com/thread.jspa?threadID=5205249
                smtpsend.Java - demo program from javamail
        */
        props.put("mail.smtps.quitwait", "false");

        Session session = Session.getInstance(props, null);

        // -- Create a new message --
        final MimeMessage msg = new MimeMessage(session);

        // -- Set the FROM and TO fields --
        msg.setFrom(new InternetAddress(username + "@gmail.com"));
        msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientEmail, false));

        if (ccEmail.length() > 0) {
            msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccEmail, false));
        }

        msg.setSubject(title);
        msg.setText(message, "utf-8");
        msg.setSentDate(new Date());

        SMTPTransport t = (SMTPTransport)session.getTransport("smtps");

        t.connect("smtp.gmail.com", username, password);
        t.sendMessage(msg, msg.getAllRecipients());      
        t.close();
    }
}

Aktualisierung am 11. Dezember 2015

Benutzername + Passwort ist keine empfohlene Lösung mehr. Das ist wegen

Ich habe dies versucht und Google Mail hat der in diesem Code als Nutzername verwendeten E-Mail die Nachricht gesendet, dass wir kürzlich einen Anmeldeversuch für Ihr Google-Konto blockiert und mich an diese Support-Seite weitergeleitet haben: support.google.com/accounts/answer/6010255 Es sieht also danach aus, als ob es funktioniert. Das E-Mail-Konto, das zum Senden verwendet wird, muss die eigene Sicherheit verringern

Google hat die Google Mail-API veröffentlicht - https://developers.google.com/gmail/api/?hl=de . Wir sollten die oAuth2-Methode anstelle von Benutzername + Passwort verwenden.

Hier ist das Code-Snippet für die Arbeit mit der Google Mail-API.

GoogleMail.Java

import com.google.api.client.util.Base64;
import com.google.api.services.gmail.Gmail;
import com.google.api.services.gmail.model.Message;
import Java.io.ByteArrayOutputStream;
import Java.io.IOException;
import Java.util.Properties;

import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 *
 * @author doraemon
 */
public class GoogleMail {
    private GoogleMail() {
    }

    private static MimeMessage createEmail(String to, String cc, String from, String subject, String bodyText) throws MessagingException {
        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

        MimeMessage email = new MimeMessage(session);
        InternetAddress tAddress = new InternetAddress(to);
        InternetAddress cAddress = cc.isEmpty() ? null : new InternetAddress(cc);
        InternetAddress fAddress = new InternetAddress(from);

        email.setFrom(fAddress);
        if (cAddress != null) {
            email.addRecipient(javax.mail.Message.RecipientType.CC, cAddress);
        }
        email.addRecipient(javax.mail.Message.RecipientType.TO, tAddress);
        email.setSubject(subject);
        email.setText(bodyText);
        return email;
    }

    private static Message createMessageWithEmail(MimeMessage email) throws MessagingException, IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        email.writeTo(baos);
        String encodedEmail = Base64.encodeBase64URLSafeString(baos.toByteArray());
        Message message = new Message();
        message.setRaw(encodedEmail);
        return message;
    }

    public static void Send(Gmail service, String recipientEmail, String ccEmail, String fromEmail, String title, String message) throws IOException, MessagingException {
        Message m = createMessageWithEmail(createEmail(recipientEmail, ccEmail, fromEmail, title, message));
        service.users().messages().send("me", m).execute();
    }
}

Um einen autorisierten Google Mail-Dienst über oAuth2 zu erstellen, finden Sie hier das Code-Snippet.

Utils.Java

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.gmail.Gmail;
import com.google.api.services.gmail.GmailScopes;
import com.google.api.services.oauth2.Oauth2;
import com.google.api.services.oauth2.model.Userinfoplus;
import Java.io.BufferedWriter;
import Java.io.File;
import Java.io.FileOutputStream;
import Java.io.IOException;
import Java.io.InputStreamReader;
import Java.io.OutputStreamWriter;
import Java.nio.file.Files;
import Java.nio.file.Paths;
import Java.security.GeneralSecurityException;
import Java.util.HashSet;
import Java.util.Set;
import org.Apache.commons.logging.Log;
import org.Apache.commons.logging.LogFactory;
import org.yccheok.jstock.engine.Pair;

/**
 *
 * @author yccheok
 */
public class Utils {
    /** Global instance of the JSON factory. */
    private static final GsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();

    /** Global instance of the HTTP transport. */
    private static HttpTransport httpTransport;

    private static final Log log = LogFactory.getLog(Utils.class);

    static {
        try {
            // initialize the transport
            httpTransport = GoogleNetHttpTransport.newTrustedTransport();

        } catch (IOException ex) {
            log.error(null, ex);
        } catch (GeneralSecurityException ex) {
            log.error(null, ex);
        }
    }

    private static File getGmailDataDirectory() {
        return new File(org.yccheok.jstock.gui.Utils.getUserDataDirectory() + "authentication" + File.separator + "gmail");
    }

    /**
     * Send a request to the UserInfo API to retrieve the user's information.
     *
     * @param credentials OAuth 2.0 credentials to authorize the request.
     * @return User's information.
     * @throws Java.io.IOException
     */
    public static Userinfoplus getUserInfo(Credential credentials) throws IOException
    {
        Oauth2 userInfoService =
            new Oauth2.Builder(httpTransport, JSON_FACTORY, credentials).setApplicationName("JStock").build();
        Userinfoplus userInfo  = userInfoService.userinfo().get().execute();
        return userInfo;
    }

    public static String loadEmail(File dataStoreDirectory)  {
        File file = new File(dataStoreDirectory, "email");
        try {
            return new String(Files.readAllBytes(Paths.get(file.toURI())), "UTF-8");
        } catch (IOException ex) {
            log.error(null, ex);
            return null;
        }
    }

    public static boolean saveEmail(File dataStoreDirectory, String email) {
        File file = new File(dataStoreDirectory, "email");
        try {
            //If the constructor throws an exception, the finally block will NOT execute
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
            try {
                writer.write(email);
            } finally {
                writer.close();
            }
            return true;
        } catch (IOException ex){
            log.error(null, ex);
            return false;
        }
    }

    public static void logoutGmail() {
        File credential = new File(getGmailDataDirectory(), "StoredCredential");
        File email = new File(getGmailDataDirectory(), "email");
        credential.delete();
        email.delete();
    }

    public static Pair<Pair<Credential, String>, Boolean> authorizeGmail() throws Exception {
        // Ask for only the permissions you need. Asking for more permissions will
        // reduce the number of users who finish the process for giving you access
        // to their accounts. It will also increase the amount of effort you will
        // have to spend explaining to users what you are doing with their data.
        // Here we are listing all of the available scopes. You should remove scopes
        // that you are not actually using.
        Set<String> scopes = new HashSet<>();

        // We would like to display what email this credential associated to.
        scopes.add("email");

        scopes.add(GmailScopes.GMAIL_SEND);

        // load client secrets
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(Utils.JSON_FACTORY,
            new InputStreamReader(Utils.class.getResourceAsStream("/assets/authentication/gmail/client_secrets.json")));

        return authorize(clientSecrets, scopes, getGmailDataDirectory());
    }

    /** Authorizes the installed application to access user's protected data.
     * @return 
     * @throws Java.lang.Exception */
    private static Pair<Pair<Credential, String>, Boolean> authorize(GoogleClientSecrets clientSecrets, Set<String> scopes, File dataStoreDirectory) throws Exception {
        // Set up authorization code flow.

        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            httpTransport, JSON_FACTORY, clientSecrets, scopes)
            .setDataStoreFactory(new FileDataStoreFactory(dataStoreDirectory))
            .build();
        // authorize
        return new MyAuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
    }

    public static Gmail getGmail(Credential credential) {
        Gmail service = new Gmail.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName("JStock").build();
        return service;        
    }
}

Um eine benutzerfreundliche oAuth2-Authentifizierung zu ermöglichen, habe ich JavaFX verwendet, um den folgenden Eingabedialog anzuzeigen

enter image description here

Den Schlüssel zum Anzeigen des benutzerfreundlichen oAuth2-Dialogfelds finden Sie in MyAuthorizationCodeInstalledApp.Java und SimpleSwingBrowser.Java

97
Cheok Yan Cheng

Der folgende Code hat bei mir funktioniert.

import Java.io.UnsupportedEncodingException;
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.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


public class SendMail {

    public static void main(String[] args) {

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

        Properties props = new Properties();
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.auth", "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);
        }
    }
}
46
MobiDev
import Java.util.Date;
import Java.util.Properties;

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;


public class SendEmail extends Object{

public static void main(String [] args)
{

    try{

        Properties props = new Properties();
        props.put("mail.smtp.Host", "smtp.mail.yahoo.com"); // for gmail use smtp.gmail.com
        props.put("mail.smtp.auth", "true");
        props.put("mail.debug", "true"); 
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");

        Session mailSession = Session.getInstance(props, new javax.mail.Authenticator() {

            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("[email protected]", "password");
            }
        });

        mailSession.setDebug(true); // Enable the debug mode

        Message msg = new MimeMessage( mailSession );

        //--[ Set the FROM, TO, DATE and SUBJECT fields
        msg.setFrom( new InternetAddress( "[email protected]" ) );
        msg.setRecipients( Message.RecipientType.TO,InternetAddress.parse("[email protected]") );
        msg.setSentDate( new Date());
        msg.setSubject( "Hello World!" );

        //--[ Create the body of the mail
        msg.setText( "Hello from my first e-mail sent with JavaMail" );

        //--[ Ask the Transport class to send our mail message
        Transport.send( msg );

    }catch(Exception E){
        System.out.println( "Oops something has gone pearshaped!");
        System.out.println( E );
    }
}
}

Erforderliche JAR-Dateien

Klicken Sie hier - So fügen Sie externe Gläser hinz

17
Kirit Vaghela

Die kurze Antwort - Nein.

Die lange Antwort - nein, da der Code auf der Anwesenheit eines SMTP-Servers basiert, der auf dem lokalen Computer ausgeführt wird und Port 25 überwacht. Der SMTP-Server (technisch der MTA oder Mail Transfer Agent) ist für die Kommunikation mit dem Mail User Agent verantwortlich (MUA, in diesem Fall Java) zum Empfangen ausgehender E-Mails.

MTAs sind normalerweise für den Empfang von E-Mails von Benutzern für eine bestimmte Domäne verantwortlich. Für die Domain gmail.com wären es also die Google Mail-Server, die für die Authentifizierung der Mail-Benutzeragenten und damit für die Übertragung der Mails in die Posteingänge auf den GMail-Servern verantwortlich sind. Ich bin mir nicht sicher, ob GMail offenen Mail-Relay-Servern vertraut, aber es ist sicherlich keine leichte Aufgabe, die Authentifizierung im Namen von Google durchzuführen und dann E-Mails an die GMail-Server weiterzuleiten.

Wenn Sie das JavaMail FAQ zur Verwendung von JavaMail für den Zugriff auf GMail lesen, werden Sie feststellen, dass der Hostname und der Port zufällig auf die GMail-Server verweisen, und zwar mit Sicherheit Wenn Sie beabsichtigen, Ihren lokalen Computer zu verwenden, müssen Sie entweder eine Weiterleitung oder eine Weiterleitung durchführen.

Sie müssen wahrscheinlich das SMTP-Protokoll gründlich verstehen, wenn Sie in Bezug auf SMTP Fortschritte erzielen möchten. Sie können mit dem Wikipedia-Artikel über SMTP beginnen, aber jeder weitere Fortschritt erfordert die Programmierung auf einem SMTP-Server.

11
Vineet Reynolds

Zum Versenden von Mails benötigen Sie einen SMTP-Server. Es gibt Server, die Sie lokal auf Ihrem eigenen PC installieren können, oder Sie können einen der vielen Online-Server verwenden. Einer der bekannteren Server ist der von Google:

Ich habe gerade erfolgreich die zulässigen Google SMTP-Konfigurationen anhand des ersten Beispiels aus Simple Java Mail :

    final Email email = EmailBuilder.startingBlank()
        .from("lollypop", "[email protected]")
        .to("C.Cane", "[email protected]")
        .withPlainText("We should meet up!")
        .withHTMLText("<b>We should meet up!</b>")
        .withSubject("hey");

    // starting 5.0.0 do the following using the MailerBuilder instead...
    new Mailer("smtp.gmail.com", 25, "your user", "your password", TransportStrategy.SMTP_TLS).sendMail(email);
    new Mailer("smtp.gmail.com", 587, "your user", "your password", TransportStrategy.SMTP_TLS).sendMail(email);
    new Mailer("smtp.gmail.com", 465, "your user", "your password", TransportStrategy.SMTP_SSL).sendMail(email);

Beachten Sie die verschiedenen Häfen und Transportstrategien (die alle für Sie erforderlichen Eigenschaften übernehmen).

Seltsamerweise benötigt Google TLS auch für Port 25, obwohl Googles Anweisungen etwas anderes sagen .

6
Benny Bottema

Es ist schon eine Weile her, dass dies gepostet wurde. Ab dem 13. November 2012 kann ich jedoch überprüfen, ob Port 465 noch funktioniert.

Lesen Sie die Antwort von GaryM am dieses Forum . Ich hoffe das hilft nur noch wenigen Menschen.

/*
* Created on Feb 21, 2005
*
*/

import Java.security.Security;
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 GoogleTest {

    private static final String SMTP_Host_NAME = "smtp.gmail.com";
    private static final String SMTP_PORT = "465";
    private static final String emailMsgTxt = "Test Message Contents";
    private static final String emailSubjectTxt = "A test from gmail";
    private static final String emailFromAddress = "";
    private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
    private static final String[] sendTo = { "" };


    public static void main(String args[]) throws Exception {

        Security.addProvider(new com.Sun.net.ssl.internal.ssl.Provider());

        new GoogleTest().sendSSLMessage(sendTo, emailSubjectTxt,
            emailMsgTxt, emailFromAddress);
        System.out.println("Sucessfully mail to All Users");
    }

    public void sendSSLMessage(String recipients[], String subject,
                               String message, String from) throws MessagingException {
        boolean debug = true;

        Properties props = new Properties();
        props.put("mail.smtp.Host", SMTP_Host_NAME);
        props.put("mail.smtp.auth", "true");
        props.put("mail.debug", "true");
        props.put("mail.smtp.port", SMTP_PORT);
        props.put("mail.smtp.socketFactory.port", SMTP_PORT);
        props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
        props.put("mail.smtp.socketFactory.fallback", "false");

        Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("xxxxxx", "xxxxxx");
            }
        });

        session.setDebug(debug);

        Message msg = new MimeMessage(session);
        InternetAddress addressFrom = new InternetAddress(from);
        msg.setFrom(addressFrom);

        InternetAddress[] addressTo = new InternetAddress[recipients.length];
        for (int i = 0; i < recipients.length; i++) {
            addressTo[i] = new InternetAddress(recipients);
        }
        msg.setRecipients(Message.RecipientType.TO, addressTo);

        // Setting the Subject and Content Type
        msg.setSubject(subject);
        msg.setContent(message, "text/plain");
        Transport.send(msg);
    }
}
4
Mukus

Der folgende Code funktioniert sehr gut. Versuchen Sie es als Java application with javamail-1.4.5.jar

import javax.mail.*;
import javax.mail.internet.*;
import Java.util.*;

public class MailSender
{
final String senderEmailID = "[email protected]";
final String senderPassword = "typesenderpassword";
final String emailSMTPserver = "smtp.gmail.com";
final String emailServerPort = "465";
String receiverEmailID = null;
static String emailSubject = "Test Mail";
static String emailBody = ":)";
public MailSender(String receiverEmailID, String emailSubject, String emailBody)
{
this.receiverEmailID=receiverEmailID;
this.emailSubject=emailSubject;
this.emailBody=emailBody;
Properties props = new Properties();
props.put("mail.smtp.user",senderEmailID);
props.put("mail.smtp.Host", emailSMTPserver);
props.put("mail.smtp.port", emailServerPort);
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.port", emailServerPort);
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
SecurityManager security = System.getSecurityManager();
try
{
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getInstance(props, auth);
MimeMessage msg = new MimeMessage(session);
msg.setText(emailBody);
msg.setSubject(emailSubject);
msg.setFrom(new InternetAddress(senderEmailID));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress(receiverEmailID));
Transport.send(msg);
System.out.println("Message send Successfully:)");
}
catch (Exception mex)
{
mex.printStackTrace();
}
}
public class SMTPAuthenticator extends javax.mail.Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(senderEmailID, senderPassword);
}
}
public static void main(String[] args)
{     
MailSender mailSender=new
MailSender("[email protected]",emailSubject,emailBody);
}
}
2
Gayathri Rajan

Funktioniert dieser Code zum Senden von E-Mails?

Nun, nein, nicht ohne einige Teile zu ändern, da ein Fehler auftritt. Sie versuchen gerade, E-Mails über einen SMTP-Server zu senden, der auf localhost ausgeführt wird, aber Sie führen keine aus, daher ConnectException.

Angenommen, der Code ist in Ordnung (ich habe es nicht wirklich überprüft), müssen Sie entweder einen lokalen SMTP-Server ausführen oder einen (Remote-) Server (von Ihrem ISP) verwenden.

In Bezug auf den Code finden Sie Beispiele im JavaMail-Download-Paket, wie im FAQ :

Wo finde ich einige Beispielprogramme, die die Verwendung von JavaMail veranschaulichen?

F: Wo finde ich einige Beispielprogramme, die die Verwendung von JavaMail veranschaulichen?
A: Das JavaMail-Download-Paket enthält viele Beispielprogramme, darunter einfache Befehlszeilenprogramme, die verschiedene Aspekte der JavaMail-API veranschaulichen, eine Swing-basierte GUI-Anwendung, ein einfaches Servlet. basierte Anwendung und eine vollständige Webanwendung, die JSP-Seiten und eine Tag-Bibliothek verwendet.

2
Pascal Thivent

Hier ist die Arbeitslösung bro. Es ist garantiert

1) Öffnen Sie zunächst Ihr Google Mail-Konto, von dem aus Sie E-Mails senden möchten, wie in Ihrem Fall "" [email protected] ".

2) Öffnen Sie diesen Link unten https://support.google.com/accounts/answer/6010255?hl=de

3) Klicken Sie unter "Mein Konto" auf "Zum Abschnitt" Weniger sichere Apps "wechseln." Möglichkeit

4) Dann schalten Sie es ein

5) das wars (:

hier ist mein Code

import javax.mail.*;
import javax.mail.internet.*;
import Java.util.*;

public class SendEmail {

   final String senderEmailID = "Sender Email id";
final String senderPassword = "Sender Pass Word";
final String emailSMTPserver = "smtp.gmail.com";
final String emailServerPort = "465";
String receiverEmailID = null;
static String emailSubject = "Test Mail";
static String emailBody = ":)";
public SendEmail(String receiverEmailID, String emailSubject, String emailBody)
{
this.receiverEmailID=receiverEmailID;
this.emailSubject=emailSubject;
this.emailBody=emailBody;
Properties props = new Properties();
props.put("mail.smtp.user",senderEmailID);
props.put("mail.smtp.Host", emailSMTPserver);
props.put("mail.smtp.port", emailServerPort);
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.port", emailServerPort);
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
SecurityManager security = System.getSecurityManager();
try
{
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getInstance(props, auth);
MimeMessage msg = new MimeMessage(session);
msg.setText(emailBody);
msg.setSubject(emailSubject);
msg.setFrom(new InternetAddress(senderEmailID));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress(receiverEmailID));
Transport.send(msg);
System.out.println("Message send Successfully:)");
}
catch (Exception mex)
{
mex.printStackTrace();
}
}
public class SMTPAuthenticator extends javax.mail.Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(senderEmailID, senderPassword);
}
}
    public static void main(String[] args) {
       SendEmail mailSender;
        mailSender = new SendEmail("Receiver Email id","Testing Code 2 example","Testing Code Body yess");
    }

}
2
Zulfiqar Ali

Probieren Sie dies aus. es funktioniert gut für mich. Stellen Sie sicher, dass Sie vor dem Senden von E-Mails den Zugriff für weniger sichere Apps in Ihrem Google Mail-Konto gewähren müssen. Gehen Sie also zum folgenden Link und probieren Sie diesen Java - Code aus.
Google Mail für weniger sichere Apps aktivieren

Sie müssen die Dateien javax.mail.jar und activation.jar in Ihr Projekt importieren.

Dies ist der vollständige Code für das Senden von E-Mails in Java

import javax.mail.*;
import javax.mail.internet.*;
import Java.util.*;

public class SendEmail {

    final String senderEmail = "your email address";
    final String senderPassword = "your password";
    final String emailSMTPserver = "smtp.gmail.com";
    final String emailServerPort = "587";
    String receiverEmail = null;
    String emailSubject = null;
    String emailBody = null;

    public SendEmail(String receiverEmail, String Subject, String message) {
        this.receiverEmail = receiverEmail;
        this.emailSubject = Subject;
        this.emailBody = message;

        Properties props = new Properties();
        props.put("mail.smtp.user", senderEmail);
        props.put("mail.smtp.Host", emailSMTPserver);
        props.put("mail.smtp.port", emailServerPort);
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.socketFactory.port", emailServerPort);
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

        SecurityManager security = System.getSecurityManager();

        try {
            Authenticator auth = new SMTPAuthenticator();
            Session session = Session.getInstance(props, auth);

            Message msg = new MimeMessage(session);
            msg.setText(emailBody);
            msg.setSubject(emailSubject);
            msg.setFrom(new InternetAddress(senderEmail));
            msg.addRecipient(Message.RecipientType.TO,
                    new InternetAddress(receiverEmail));
            Transport.send(msg);
            System.out.println("send successfully");
        } catch (Exception ex) {
            System.err.println("Error occurred while sending.!");
        }

    }

    private class SMTPAuthenticator extends javax.mail.Authenticator {

        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(senderEmail, senderPassword);
        }
    }

    public static void main(String[] args) {
        SendEmail send = new SendEmail("receiver email address", "subject", "message");
    }

}
2

Ihr Code funktioniert, abgesehen vom Einrichten der Verbindung zum SMTP-Server. Sie benötigen einen SMTP-Server (Running Mail), um Ihnen E-Mails zu senden.

Hier ist Ihr geänderter Code. Ich habe die nicht benötigten Teile auskommentiert und die Sitzungserstellung so geändert, dass ein Authenticator erforderlich ist. Jetzt müssen Sie nur noch SMPT_HOSTNAME, USERNAME und PASSWORD herausfinden, die Sie verwenden möchten (Ihr Internetanbieter stellt diese normalerweise zur Verfügung).

Ich mache das immer so (mit einem entfernten SMTP-Server, den ich kenne), weil es unter Windows nicht so trivial ist, einen lokalen Mailserver zu betreiben (unter Linux ist es anscheinend ganz einfach).

import Java.util.*;

import javax.mail.*;
import javax.mail.internet.*;

//import javax.activation.*;

public class SendEmail {

    private static String SMPT_HOSTNAME = "";
    private static String USERNAME = "";
    private static String PASSWORD = "";

    public static void main(String[] args) {

        // Recipient's email ID needs to be mentioned.
        String to = "[email protected]";

        // Sender's email ID needs to be mentioned
        String from = "[email protected]";

        // Assuming you are sending email from localhost
        // String Host = "localhost";

        // Get system properties
        Properties properties = System.getProperties();

        // Setup mail server
        properties.setProperty("mail.smtp.Host", SMPT_HOSTNAME);

        // Get the default Session object.
        // Session session = Session.getDefaultInstance(properties);

        // create a session with an Authenticator
        Session session = Session.getInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(USERNAME, PASSWORD);
            }
        });

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

            // Set From: header field of the header.
            message.setFrom(new InternetAddress(from));

            // Set To: header field of the header.
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(
                    to));

            // Set Subject: header field
            message.setSubject("This is the Subject Line!");

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

            // Send message
            Transport.send(message);
            System.out.println("Sent message successfully....");
        } catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}
1
Adriaan Koster

Tatsächlich funktioniert 465 und die Ausnahme, die Sie erhalten, liegt möglicherweise an dem nicht geöffneten SMTP-Port 25. Standardmäßig ist die Portnummer 25. Sie können sie jedoch mit dem als Open Source verfügbaren Mail-Agenten konfigurieren - Quecksilber

Verwenden Sie der Einfachheit halber einfach die folgende Konfiguration, und alles wird gut.

// Setup your mail server
props.put("mail.smtp.Host", SMTP_Host); 
props.put("mail.smtp.user",FROM_NAME);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.port", "25");
props.put("mail.debug", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.EnableSSL.enable","true");
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");  
props.setProperty("mail.smtp.socketFactory.fallback", "false");  
props.setProperty("mail.smtp.port", "465");  
props.setProperty("mail.smtp.socketFactory.port", "465");

Für noch mehr: Schauen Sie sich das komplette Arbeitsbeispiel von Grund auf an hier

1
Atif Imran

Ich habe meine funktionierende Google Mail-Klasse Java für Ihre Überprüfung auf Pastebin gesetzt. Achten Sie besonders auf die Methode "startSessionWithTLS". Möglicherweise können Sie JavaMail anpassen, um dieselbe Funktionalität bereitzustellen. http://Pastebin.com/VE8Mqkqp

1
Paul Gregoire

Ich habe die gleiche Ausnahme wie Sie. Grund dafür ist, dass der smpt-Server auf Ihrem Computer nicht läuft (da Ihr Host localhost ist). Wenn Sie Windows 7 verwenden, ist kein SMTP-Server vorhanden. Sie müssen also die Domain herunterladen, installieren und konfigurieren und Konten erstellen. Ich habe hmailserver als SMTP-Server verwendet und auf meinem lokalen Computer installiert und konfiguriert. https://www.hmailserver.com/download

1
Lasan