Przeczytałem i wypróbowałem wszystkie rozwiązania podane w stackoverflow oraz w innych różnych witrynach, ale nadal otrzymuję problem i otrzymuję wyjątek.Uzyskiwanie javax.mail.NoSuchProviderException przy próbie wysyłania poczty za pomocą java
Kod:
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.");
}
}
Kiedy debugowanie kodu, to przestać działać na linii: transport transport = mailSession.getTransport ("SMTP");
I dodano następujące dzbanków:
Mail.jar, pop3.jar, SMTP 1.4.2.jar, activation.jar, additional.jar
Pełny wyjątek:
Wyjątek nici "głównym" javax.mail.NoSuchProviderException: SMTP w javax.mail.Session.getService (Session.java:764) w javax .mail.Session.getTransport (Session.java:689) na javax.mail.Session.getTransport (Session.java:632) na javax.mail.Session.getTransport (Session.java:612) na javax.mail .Session.getTransport (Session.java: 667) na javax.mail.Transport.send0 (Transport.java:154) na javax.mail.Transport.send (Transport.java:80) na JannyaPaid_Device.sendmail.sendEmail (sendmail.java:68) na JannyaPaid_Device.sendmail.main (sendmail.java:26)
również chcę zapytać, czy zapora może zapobiec tej rzeczy do wysyłania poczty? Mamy zainstalowaną zaporę ogniową, ale mogę ręcznie otwierać i wysyłać pocztę Gmaila.
'Transport.send (emailMessage)' wystarczy, aby wysłać wiadomość e-mail, dlaczego chcesz to zrobić? – Babel
Ale jeśli lubię 'Transport transportu = null; \t \t Transport.send (emailMessage); 'następnie również otrzymuje ten sam wyjątek. –
Nie ustawiasz protokołu, który ma być używany Domyślam ustawić poniższy wiersz 'emailProperties.put (" mail.transport.protocol "," smtp ");' – Babel