Ho letto e provato tutte le soluzioni fornite in stackoverflow e in altri vari siti, ma continuano ad avere problemi e ad ottenere delle eccezioni.Ottenere javax.mail.NoSuchProviderException quando provo a inviare la posta usando java
Codice:
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.");
}
}
Quando il debug del codice, è smettere di lavorare alla riga: trasporto Trasporti = mailSession.getTransport ("smtp");
ho aggiunto seguenti JAR:
mail.jar, pop3.jar, smtp-1.4.2.jar, activation.jar, additional.jar
eccezione completa:
Exception in thread "main" javax.mail.NoSuchProviderException: smtp a javax.mail.Session.getService (Session.java:764) a javax .mail.Session.getTransport (Session.java:689) all'indirizzo javax.mail.Session.getTransport (Session.java:632) all'indirizzo javax.mail.Session.getTransport (Session.java:612) su javax.mail .Session.getTransport (Session.java:667) all'indirizzo javax.mail.Transport.send0 (Transport.java:154) all'indirizzo javax.mail.Transport.send (Transport.java:80) su JannyaPaid_Device.sendmail.sendEmail (sendmail.java:68) a JannyaPaid_Device.sendmail.main (sendmail.java:26)
anche io voglio chiedere che il firewall può impedire queste cose per inviare la posta? Dato che abbiamo installato qualche firewall, ma sono in grado di aprire e inviare mail thrugh gmail manualmente.
'Transport.send (emailMessage)' è sufficiente per inviare la posta perché si desidera fare in questo modo? – Babel
Ma se mi piace 'Transport transport = null; \t \t Transport.send (emailMessage); 'inoltre ottiene la stessa eccezione. –
Non si sta impostando il protocollo da utilizzare, suppongo di aver impostato la seguente riga 'emailProperties.put (" mail.transport.protocol "," smtp ");' – Babel