TLS-Problem beim senden von gmail über JavaMail
Stellt sich heraus, dass JavaMail ist ein bisschen mehr frustrierend, als ich dachte, es wäre. Ich habe mehrere Beispiele für online -, wie zu senden, eine einfache SMTP-E-Mails über die Server von Gmail (aber nicht über SSL). Nach dem Versuch mehrere andere Beispiele von code, ich halte den Abschluss für das gleiche Beispiel für die Ausnahme, wenn ich rufe transport.connect()
. Ich bekomme immer diese stack-trace:
Exception in thread "main" com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. l10sm302158wfk.21
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1580)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1097)
at SendEmail.main(SendEmail.java:47)
Kann mir bitte jemand sagen, was ich hinzufügen sollte oder das Problem beheben?
Hier ist mein code:
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.host", "smtp.gmail.com");
props.put("mail.user", "[email protected]");
props.put("mail.password", "blah");
props.put("mail.port", "587");
Session mailSession = Session.getDefaultInstance(props, null);
Transport transport = mailSession.getTransport();
MimeMessage message = new MimeMessage(mailSession);
message.setSubject("This is a test");
message.setContent("This is a test", "text/plain");
message.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
transport.connect();
transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
transport.close();
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie aktivieren
STARTTLS
. Fügen Sie eine weitere Eigenschaft, um Ihre Konfiguration:mail.smtp.auth
Eigenschafttrue
.Authenticator
anstatt konfigurieren der Anmeldeinformationen. Entfernen Sie denmail.user
undmail.password
Tasten. Dann statt der übergabenull
als zweites argumentSession.getDefaultInstance
erstellen, und übergeben Sie eine Implementierung vonAuthenticator
, der überschreibt diegetPasswordAuthentication
Methode - die details sind einfach.Hier E-Mail-Absender, die Verwendung von MSN-SMTP-Dienst
Mein host ist smtp.live.com und port 587.
Als in offizielle doc von Java-Mail, hier können Sie mehr info über die besten Java-Mail-Mechanismus zum senden und empfangen von E-mails.
Eigenschaften von E-Mail-Client sind:
Senden Mechanismus :
Beachten:
Code läuft auch auf lokale indischen Server.
Aber dieser reagiert nicht auf Azur Kongo: Beide sind Linux-server.
Fehler:
Selbst wenn system-Eigenschaft manuell gesetzt:
auch @Rob Harrop und @Brian 's Punkte gewährleistet sind