2016-11-22 8 views
0

я получаю некоторые проблемы с «сеанса» объект при попытке отправить электронную почту, это кодКак отправить электронную почту с помощью Java 6 SE?

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(); 
    } 
    } 
} 

An это тест:

import java.io.File; 

public class TestEmail { 
    public static void main(String[] args) { 
     File allegato = new File(CreazioneFile.AggiungiDati()); 

    EmailSender email = new EmailSender(
        "myuser", 
        "mypass", 
        "smtp.gmail.com",      
        "sendToAddress", 
        "Invio automatico email da Java" 
       ); 

    email.inviaEmail(); 
    System.out.println(allegato); 
    allegato.delete(); 
    } 
} 

Это ошибка стека:

Exception in thread "main" java.lang.NoClassDefFoundError: com.sun.mail.util.MailLogger at javax.mail.Session.initLogger(Session.java:226) at javax.mail.Session.(Session.java:210) at javax.mail.Session.getDefaultInstance(Session.java:321)

Проблема в том, что касается RAD и сессии, но я не знаю, где я должен установить, и что я должен установить, можете ли вы, пожалуйста, помочь мне?

+0

возможный дубликат http://stackoverflow.com/questions/34413/why-am-i-getting-a-noclassdeffounderror-in-java –

ответ

1

com.sun.mail.util.MailLogger является частью API JavaMail. Он уже включен в среду EE (поэтому вы можете использовать его на своем реальном сервере), но он не включен в среду SE.

API JavaMail доступен как дополнительный пакет для использования с платформой Java SE и также включен в платформу Java EE.

99%, что вы запускаете свои тесты в среде SE, что означает, что вы должны беспокоиться о том, чтобы вручную добавлять его в свой путь к классам при выполнении тестов.

Надежда ссылку ниже будет полезно для вас

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

+0

Я не могу взять пример, например, я использую RAD IDE, и нет способа конвертировать этот проект в maven ... – DarioS