问题描述
我无法使用 Java 邮件 API 从我的 yahoo id 发送电子邮件.我尝试了谷歌的不同选项,但失败了.请看看我下面的代码,如果我遗漏了什么,请告诉我.在我看来 Yahoo 不提供免费发送邮件的服务,但我不确定.请提供您对此的看法.
I am not able to send email from my yahoo id using Java mail API. I tried different options from Google,but fails. Please have a look my below code and let me know if I am missing something. In my point of view Yahoo does not provide the free service to send mails, but I am not sure. Please provide your thoughts on this.
import javax.mail.*; import javax.mail.internet.*; import java.util.Properties; public class MailExample { private static final String **TP_HOST_NAME = "smtp.mail.yahoo.com"; private static final int **TP_HOST_PORT = 587;//465,587,25 private static final String **TP_AUTH_USER = "dummyrls@yahoo.com"; private static final String **TP_AUTH_PWD = "my password"; public static void main(String[] args) throws Exception{ new MailExample().test(); } public void test() throws Exception{ Properties props = new Properties(); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.host", **TP_HOST_NAME); props.put("mail.smtp.auth", "true"); // props.put("mail.smtps.quitwait", "false"); Session mailSession = Session.getDefaultInstance(props); mailSession.setDebug(true); Transport transport = mailSession.getTransport(); MimeMessage message = new MimeMessage(mailSession); message.setSubject("Testing **TP-SSL"); message.setContent("This is a test", "text/plain"); message.addRecipient(Message.RecipientType.TO, new InternetAddress("rlss@abc.com")); transport.connect (**TP_HOST_NAME, **TP_HOST_PORT, **TP_AUTH_USER, **TP_AUTH_PWD); transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO)); transport.close(); } }
上面的代码在 Gmail 上运行良好,但在 Yahoo 上却出现如下错误:
The above code works fine for Gmail, but for Yahoo it's giving error like:
DEBUG: setDebug: JavaMail version 1.4.1 DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.**TPTransport, Sun Microsystems, Inc.,1.4.1] DEBUG **TP: useEhlo true, useAuth true DEBUG **TP: trying to connect to host "smtp.mail.yahoo.com", port 587, isSSL false Exception in thread "main" javax.mail.MessagingException: Could not connect to **TP host: smtp.mail.yahoo.com, port: 587; nested exception is: java.net.ConnectException: Connection timed out: connect at com.sun.mail.smtp.**TPTransport.openServer(**TPTransport.java:1391) at com.sun.mail.smtp.**TPTransport.protocolConnect(**TPTransport.java:412) at javax.mail.Service.connect(Service.java:288) at com.sample.mailexample.MailExample.test(MailExample.java:313) at com.sample.mailexample.MailExample.main(MailExample.java:291) Caused by: java.net.ConnectException: Connection timed out: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233) at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189) at com.sun.mail.smtp.**TPTransport.openServer(**TPTransport.java:1359) ... 4 more
我该如何解决这个问题?
How can I solve this?
推荐答案
试试这个代码
public class SendMail { String host, port, emailid,username, password; Properties props = System.getProperties(); Session l_session = null; public BSendMail() { host = "smtp.mail.yahoo.com"; port = "587"; emailid = "a@yahoo.com"; username = "a"; password = "pwd"; emailSettings(); createSession(); sendMessage("a@yahoo.com", "rahul@gmail.com","Test","test Mail"); } public void emailSettings() { props.put("mail.smtp.host", host); props.put("mail.smtp.auth", "true"); props.put("mail.debug", "false"); props.put("mail.smtp.port", port); // props.put("mail.smtp.socketFactory.port", port); // props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); // props.put("mail.smtp.socketFactory.fallback", "false"); } public void createSession() { l_session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); l_session.setDebug(true); // Enable the debug mode } public boolean sendMessage(String emailFromUser, String toEmail, String subject, String msg) { //System.out.println("Inside sendMessage 2 :: >> "); try { //System.out.println("Sending Message *********************************** "); MimeMessage message = new MimeMessage(l_session); emailid = emailFromUser; //System.out.println("mail id in property ============= >>>>>>>>>>>>>> " + emailid); //message.setFrom(new InternetAddress(emailid)); message.setFrom(new InternetAddress(this.emailid)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail)); message.addRecipient(Message.RecipientType.BCC, new InternetAddress(AppConstants.fromEmail)); message.setSubject(subject); message.setContent(msg, "text/html"); //message.setText(msg); Transport.send(message); System.out.println("Message Sent"); } catch (MessagingException mex) { mex.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }//end catch block return true; } }