用Java发送/接收电子邮件
我想通过Java发送电子邮件(任何来自yahoo、gmail或任何其他部分的电子邮件) 我尝试了代码,但是我得到了异常用Java发送/接收电子邮件,java,email,sendmail,post-receive-email,Java,Email,Sendmail,Post Receive Email,我想通过Java发送电子邮件(任何来自yahoo、gmail或任何其他部分的电子邮件) 我尝试了代码,但是我得到了异常 javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25; nested exception is: java.net.ConnectException: Connection refused at com.sun.mail.smtp.SMTPTran
javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
nested exception is:
java.net.ConnectException: Connection refused
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
at javax.mail.Service.connect(Service.java:295)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at myemailtesting.MyEmailTesting.main(MyEmailTesting.java:72)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:319)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:233)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938)
... 7 more
我的密码是
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package myemailtesting;
/**
*
* @author xxxx
*/
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class MyEmailTesting {
public static void main(String[] args) {
System.out.println("This is EMAIL testing!!!");
// Recipient's email ID needs to be mentioned.
String to = "xx@gmail.com";
// Sender's email ID needs to be mentioned
String from = "xx@gmail.com";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
System.out.println("test 001");
Properties properties = System.getProperties();
System.out.println("test 002");
// Setup mail server
System.out.println("test 003");
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
System.out.println("test 004");
Session session = Session.getDefaultInstance(properties);
try {
// Create a default MimeMessage object.
System.out.println("test 005");
MimeMessage message = new MimeMessage(session);
System.out.println("test 006");
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
System.out.println("test 007");
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
System.out.println("test 008");
// Set Subject: header field
message.setSubject("This is the Subject Line!");
System.out.println("test 009");
// Now set the actual message
message.setText("This is actual message");
System.out.println("test 010");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
对于除错,我使用statement作为System.out.println(“test00x”)代码>
我得到的输出是
This is EMAIL testing!!!
test 001
test 002
test 003
test 004
test 005
test 006
test 007
test 008
test 009
test 010
javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
我尝试了许多代码,但没有得到任何输出。得到一些例外
我看到在某个地方,我需要保持SMTP服务器正常运行。我不知道需要做什么。我相信apachecommons将是一个不错的选择
有人能帮我做以下几步吗
需要的jar文件
如何设置smptp
发送电子邮件(来自任何网站,如雅虎、gmail或任何私人电子邮件id)
或
用java发送电子邮件的逐步过程…您没有在本地主机上运行SMTP邮件服务器:25。您的邮件配置错误,您应该与其他邮件服务器对话,或者您确实打算与localhost中的某个邮件服务器对话,在这种情况下,您需要安装和/或运行它。严格来说,这不是Java问题。您需要一个传出SMTP服务器,您可以将邮件发送到该服务器,该服务器将负责将邮件发送到适当的google、yahoo和aol服务器
作为“主机”,您必须设置SMTP服务器,或者在您的计算机上安装SMTP服务器(如果您愿意),但这是一项艰巨的任务。通常大公司和服务提供商都有SMTP服务器,可以接受来自其网络内部的任何邮件
然而,大多数SMTP服务器都是不开放的,不会让你随意发送电子邮件,至少不是免费的。您可以创建一个gmail帐户,并使用gmail SMTP(SMTP.gmail.com),使用您传输的帐户用户名和密码,通过Google的SMTP服务器进行身份验证
此外,您不能总是指定“发件人”标题,它可能会被SMTP服务器重写以反映邮件发送的实际帐户,或者如果不是从正确的SMTP服务器到达,则在另一端可能被视为垃圾邮件
我建议您阅读SMTP的工作原理,它是一个过于复杂且相当陈旧的协议,但值得了解它的工作原理 试试这个。。。它的工作
import org.apache.commons.mail.*;
public class EmailTest {
public static void main(String[] args) {
try {
Email email = new SimpleEmail();
email.setSmtpPort(587);
email.setAuthenticator(new DefaultAuthenticator("emailid@gmail.com",
"yourPassword"));
email.setDebug(true);
email.setHostName("smtp.gmail.com");
email.setFrom("emailid@gmail.com");
email.setSubject("Hi");
email.setMsg("This is a test mail ... :-)");
email.addTo("senderId@yahoo.co.in");
email.setTLS(true);
email.send();
System.out.println("Mail sent!");
} catch (Exception e) {
System.out.println("Exception :: " + e);
}
}
}
您可以在计算机中安装SMTP服务器(教程),配置并使用它,或者使用外部STMP服务器(如+1)来获得一段漂亮的代码。但是请注意,某些环境(例如Oracle应用程序)不喜欢Email=new SimpleEmail()
在try{}
子句中。注意,这个语句(只有这个语句)应该移到try{}
子句之外。实际上,我所说的并不是全部。这个commons.mail
库在我的环境中根本不起作用,我刚刚发现了这一点。我将尝试javax.mail
而不是.Yup。工作起来很有魅力。:)