2009-07-05 5 views
0

Dans mon application Java, je dois envoyer des e-mails à différentes adresses mail. J'utilise le code suivant, mais pour une raison quelconque, cela ne fonctionne pas.Impossible d'envoyer le courrier à partir de l'application Java

public class main { 
    public static void main(String[] args) { 
     Properties props = new Properties(); 
     props.put("mail.smtp.host", "mail.yahoo.com."); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.debug", "true"); 

     Session session = Session.getInstance(props, new MyAuth()); 

     try { 
      Message msg = new MimeMessage(session); 
      msg.setFrom(new InternetAddress("[email protected]")); 
      InternetAddress[] address = {new InternetAddress("[email protected]")}; 
      msg.setRecipients(Message.RecipientType.TO, address); 
      msg.setSubject("subject "); 
      msg.setSentDate(new Date()); 

      msg.setText("Message here "); 

      Transport.send(msg); 
     } catch (MessagingException e) {} 
    } 

} 

class MyAuth extends Authenticator { 
    protected PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication("my username","my password"); 
    } 
} 

je reçois le texte folowing de debug il:

 
[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: trying to connect to host "smtp.mail.yahoo.com.au.", port 25, isSSL false 

Quelqu'un pourrait-il me dire, ce que je fais mal ici?

+0

Juste pour info, votre code sera plus testable et plus flexible si vous codez sur l'API MailSender de Spring plutôt que sur l'API JavaMail principale. Par exemple, vous ne vous retrouvez pas avec des appels statiques impossibles à tester comme "Transport.send (msg)". –

+0

En règle générale, c'est une bonne idée d'au moins imprimer vos exceptions, en particulier lors du débogage ... –

Répondre

1

Je ne suis pas sûr, mais j'ai fait face au même problème lors de l'envoi de courrier en utilisant un identifiant gmail, vous utilisez yahoo. Le problème était gmail utilise la protection de la couche ssl, je pense même est le cas avec yahoo si vous devez utiliser

mail.smtps.host instead of mail.smtp.host 

et même pour d'autres propriétés aussi.

et isSSL à true.

Je peux poster un extrait de code complet, une fois que j'arrive au bureau et que j'utilise la machine du bureau. Pour l'instant, vous pouvez regarder http://www.rgagnon.com/javadetails/java-0570.html

+0

Merci .... Je suis allé au fond de tout ça! –

+0

S'il vous plaît ajouter la solution de votre problème à votre description - cela permet aux autres dans votre situation de voir la réponse directement. –

+1

Le lien dans le message ci-dessus m'a emmené à un exemple qui a fonctionné! –

0

Il pourrait être un problème avec votre blocage du port ISP 25 trafic

De http://help.yahoo.com/l/us/yahoo/smallbusiness/bizmail/pop/pop-32.html (pas rare!):

Dans une tentative de contrôle des courriels non sollicités (spam), certains fournisseurs de services Internet maintenant bloquer le port 25, ce qui signifie que vous pourriez rencontrer des problèmes techniques lors de l'envoi de courrier électronique. Si vous rencontrez des difficultés pour envoyer des e-mails, vous devrez peut-être utiliser le port 465 (recommandé) ou 587 lors de l'envoi d'e-mails via le serveur SMTP de Yahoo!

2

Yahoo! Adresse mail du serveur SMTP: smtp.mail.yahoo.com
Yahoo! Nom d'utilisateur SMTP de messagerie: votre version complète de Yahoo! Adresse e-mail mail (y compris "@ yahoo.com")
Yahoo! Mot de passe SMTP: votre compte Yahoo! Mot de passe Mail
Yahoo! Mail Port SMTP: 465
Yahoo! Mail SMTP TLS/SSL requis: oui

Des paramètres similaires fonctionnent avec gmail. Pour yahoo vous pourriez avoir besoin de yahoo plus compte

Questions connexes