it-swarm.com.de

Senden von E-Mails ohne Verwendung eines E-Mail-Servers

JavaMail sendet E-Mails über einen E-Mail-Server, normalerweise über die SMTP-Schnittstelle eines E-Mail-Anbieters. Ist es notwendig, einen E-Mail-Server zum Senden von E-Mails zu verwenden?

Ich habe eine Website, auf der E-Mails gesendet werden, und wenn möglich, möchte ich die E-Mails direkt aus dem Website-Code senden, ohne einen E-Mail-Server zu verwenden. Die JavaMail FAQ sagt, dass ein E-Mail-Server erforderlich ist.

Gibt es eine Möglichkeit, E-Mails ohne Verwendung eines E-Mail-Servers zu senden, entweder mit JavaMail oder einer anderen API?

11
Dean Schulze

Sie können eine E-Mail direkt an einen der im MX-Datensatz der Adressdomäne genannten SMTP-Server senden. Normalerweise ist das jedoch eine schlechte Idee:

Die Zustellung der E-Mails an einen lokalen Server ist schnell - Sie können fast sofort fortfahren und etwas anderes tun und den Server die Zustellung überlassen.

Die eigentliche Zustellung kann einige Zeit dauern, z. B. kann der Remote-Mailserver langsam sein. Oder es lehnt die E-Mail zuerst ab - es ist eine bekannte Strategie gegen Spam, einen Absender anzuweisen, eine E-Mail ein zweites Mal zu senden, was einige Spam-Bots nicht tun.

Außerdem kann der Mailserver einen Tag später problemlos erneut versuchen, wenn der Remote-Server ausfällt. Dies verringert das Risiko von Mailverlust.

11
johannes

Es hängt alles davon ab, was Sie genau unter "verwenden" verstehen.

Wenn "Verwendung" nur die direkte Verwendung eines E-Mail-Servers umfasst, können Sie die E-Mail weiterleiten, um sie über einen anderen Dienst indirekt an einen E-Mail-Server zu senden. Für praktische Anwendungsfälle scheint dies für mich eine "Good Enough ™" - Lösung zu sein.

Wenn Ihre Frage jedoch wörtlich "ohne E-Mail-Server" bedeutet, ist dies nur möglich, wenn Ihre Software die E-Mail auf irgendeine Weise in den Posteingang des Zielclients stellen kann Ihrer Wahl, jedoch mit Ausnahme von POP3 oder IMAP oder einem anderen E-Mail-relevanten Protokoll, das im E-Mail-Kontext verwendet wird (denn wenn Sie ein solches Protokoll verwenden würden, würde dieses bestimmte Programm als Mailserver fungieren, was nicht zulässig ist).

Um die Frage zu beantworten: Ja. Zumindest theoretisch.

1
JensG

Wenn wir eine E-Mail von Java Code) an jemanden senden müssen, müssen wir Zugriff auf einige Mail-Server-Anmeldeinformationen haben. Nun, nicht immer.

Google hat freien Zugriff auf einen seiner Mailserver bereitgestellt, und Sie können ihn in Java Code. Unter dem geschriebenen Code verwenden, wenn er eher wie eine Notiz für mich selbst ist. Wenn ich ihn also irgendwann brauche, Sie kann hier verweisen: http://www.computerbuzz.in/2014/02/how-to-send-email-in-Java-using-gmail.html

private void setMailServerProperties()
    {
        Properties emailProperties = System.getProperties();
        emailProperties.put("mail.smtp.port", "586");
        emailProperties.put("mail.smtp.auth", "true");
        emailProperties.put("mail.smtp.starttls.enable", "true");
        mailSession = Session.getDefaultInstance(emailProperties, null);
    }

    private MimeMessage draftEmailMessage() throws AddressException, MessagingException
    {
        String[] toEmails = { "[email protected]" };
        String emailSubject = "Test email subject";
        String emailBody = "This is an email sent by http://www.computerbuzz.in.";
        MimeMessage emailMessage = new MimeMessage(mailSession);
        /**
         * Set the mail recipients
         * */
        for (int i = 0; i < toEmails.length; i++)
        {
            emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
        }
        emailMessage.setSubject(emailSubject);
        /**
         * If sending HTML mail
         * */
        emailMessage.setContent(emailBody, "text/html");
        /**
         * If sending only text mail
         * */
        //emailMessage.setText(emailBody);// for a text email
        return emailMessage;
    }

    private void sendEmail() throws AddressException, MessagingException
    {
        /**
         * Sender's credentials
         * */
        String fromUser = "[email protected]";
        String fromUserEmailPassword = "*******";

        String emailHost = "smtp.gmail.com";
        Transport transport = mailSession.getTransport("smtp");
        transport.connect(emailHost, fromUser, fromUserEmailPassword);
        /**
         * Draft the message
         * */
        MimeMessage emailMessage = draftEmailMessage();
        /**
         * Send the mail
         * */
        transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
        transport.close();
        System.out.println("Email sent successfully.");
    }
}
0
user3350913