如何使用Java 6 SE发送电子邮件?

时间:2016-11-22 10:27:33

标签: java email websphere

我在"会话中遇到了一些问题"在尝试发送电子邮件时,该对象是代码

var bgColor = context.Request.QueryString["bg_color"];

这是测试类:

import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class EmailSender {
  private String user;
  private String password;
  private String host;
  private String destinatario;
  private String oggetto;
  private String allegato;

  /**
   * 
  * Costruttore completo, richiede i parametri
  * di connessione al server di posta
  * @param user
  * @param password
  * @param host
  * @param mittente
  * @param destinatari
  * @param oggetto
  * @param allegati
  */
  public EmailSender(String user, String password, String host, 
                     String destinatario, 
                     String oggetto){

    this.user = user;
    this.password = password;
    this.host = host;
    this.destinatario = destinatario;
    this.oggetto = oggetto;
  }

  // Metodo che si occupa dell'invio effettivo della mail
  public void inviaEmail() {
    int port = 465; //porta 25 per non usare SSL

    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.user", user);
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.port", port);

    // commentare la riga seguente per non usare SSL 
    props.put("mail.smtp.starttls.enable","true");
    props.put("mail.smtp.socketFactory.port", port);

    // commentare la riga seguente per non usare SSL 
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");

    Session session = Session.getInstance(props, null);
    session.setDebug(true);

    // Creazione delle BodyParts del messaggio
    MimeBodyPart messageBodyPart1 = new MimeBodyPart();
    MimeBodyPart messageBodyPart2 = new MimeBodyPart();

    try{
      // COSTRUZIONE DEL MESSAGGIO
      Multipart multipart = new MimeMultipart();
      MimeMessage msg = new MimeMessage(session);

      // header del messaggio
      msg.setSubject(oggetto);
      msg.setSentDate(new Date());
      msg.setFrom(new InternetAddress(user));

      // destinatario
      msg.addRecipient(Message.RecipientType.TO,
      new InternetAddress(destinatario));

      // corpo del messaggio
      messageBodyPart1.setText("Ciao sono veramente euforico");
      multipart.addBodyPart(messageBodyPart1);

      // allegato al messaggio
      allegato = CreazioneFile.AggiungiDati();
      DataSource source = new FileDataSource(allegato);
      messageBodyPart2.setDataHandler(new DataHandler(source));
      messageBodyPart2.setFileName(allegato);
      multipart.addBodyPart(messageBodyPart2);

      // inserimento delle parti nel messaggio
      msg.setContent(multipart);

      Transport transport = session.getTransport("smtps"); //("smtp") per non usare SSL
      transport.connect(host, user, password);
      transport.sendMessage(msg, msg.getAllRecipients());
      transport.close();

      System.out.println("Invio dell'email Terminato");

    }catch(AddressException ae) {
      ae.printStackTrace();
    }catch(NoSuchProviderException nspe){
      nspe.printStackTrace();
    }catch(MessagingException me){
      me.printStackTrace();
    }
  }
}

堆栈错误:

  

线程中的异常" main" java.lang.NoClassDefFoundError:com.sun.mail.util.MailLogger       在javax.mail.Session.initLogger(Session.java:226)       在javax.mail.Session。(Session.java:210)       在javax.mail.Session.getDefaultInstance(Session.java:321)

它确定RAD和会话的问题,但我不知道我要设置的地方,以及我要设置的内容,你可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

com.sun.mail.util.MailLogger是JavaMail API的一部分。它已包含在EE环境中(这就是您可以在实时服务器上使用它的原因),但它不包含在SE环境中。

JavaMail API作为可选包提供,用于Java SE平台,也包含在Java EE平台中。

99%您在SE环境中运行测试,这意味着您在运行测试时需要手动将其添加到类路径中。

希望以下链接对您有所帮助

http://crunchify.com/java-mailapi-example-send-an-email-via-gmail-smtp/