zu senden Ich habe gelesen und versucht alle Lösung in Stackoverflow und in anderen verschiedenen Websites gegeben, aber immer noch Problem und bekommen Ausnahme.Erhalten von javax.mail.NoSuchProviderException, wenn versuchen, Mail mit Java
Code:
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
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 {
Properties emailProperties;
Session mailSession;
MimeMessage emailMessage;
public static void main(String args[]) throws AddressException,
MessagingException {
sendmail javaEmail = new sendmail();
javaEmail.setMailServerProperties();
javaEmail.createEmailMessage();
javaEmail.sendEmail();
}
public void setMailServerProperties() {
String emailPort = "587";//gmail's smtp port
emailProperties = System.getProperties();
emailProperties.put("mail.smtp.port", emailPort);
emailProperties.put("mail.smtp.auth", "true");
emailProperties.put("mail.smtp.starttls.enable", "true");
}
public void createEmailMessage() throws AddressException,
MessagingException {
String[] toEmails = { "[email protected]" };
String emailSubject = "Java Email";
String emailBody = "This is an email sent by JavaMail api.";
mailSession = Session.getDefaultInstance(emailProperties, null);
emailMessage = new MimeMessage(mailSession);
for (int i = 0; i < toEmails.length; i++) {
emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
}
emailMessage.setSubject(emailSubject);
emailMessage.setContent(emailBody, "text/html");//for a html email
//emailMessage.setText(emailBody);// for a text email
}
public void sendEmail() throws AddressException, MessagingException {
String emailHost = "smtp.gmail.com";
String fromUser = "emailid";//just the id alone without @gmail.com
String fromUserEmailPassword = "test";
Transport transport = mailSession.getTransport("smtp");
transport.connect(emailHost, fromUser, fromUserEmailPassword);
transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
transport.close();
System.out.println("Email sent successfully.");
}
}
Wenn ich Code debuggen, stoppen sie an der Linie arbeiten: Transport Transport = mailSession.getTransport ("smtp");
Ich habe hinzugefügt folgende JAR-Dateien:
mail.jar, pop3.jar, smtp-1.4.2.jar, activation.jar, additional.jar
Volle Ausnahme:
Exception in thread "main" javax.mail.NoSuchProviderException: SMTP- bei javax.mail.Session.getService (Session.java:764) bei javax .mail.Session.getTransport (Session.java:689) bei javax.mail.Session.getTransport (Session.java:632) bei javax.mail.Session.getTransport (Session.java:612) bei javax.mail .Session.getTransport (Session.java:667) bei javax.mail.Transport.send0 (Transport.java:154) bei javax.mail.Transport.send (Transport.java:80) bei JannyaPaid_Device.sendmail.sendEmail (sendmail.java:68) bei JannyaPaid_Device.sendmail.main (sendmail.java:26)
auch ich will, dass die Firewall fragen, kann diese Dinge verhindern Mail zu senden? Da wir eine Firewall installiert haben, kann ich Mail manuell öffnen und versenden.
'Transport.send (emailMessage)' ist genug, um eine Mail zu senden, warum Sie so wollen? – Babel
Aber wenn ich mag 'Transport transport = null; \t \t Transport.send (emailMessage); 'dann auch gleiche Ausnahme. –
Sie setzen Protokoll nicht zu verwenden Ich denke, setzen Sie die untere Zeile 'emailProperties.put (" mail.transport.protocol "," smtp ");' – Babel