用Java发送/接收电子邮件

时间:2012-06-28 22:50:44

标签: java email sendmail post-receive-email

我想通过Java发送电子邮件(任何来自yahoo,gmail或任何其他部分的电子邮件)。

我尝试了代码here,但我得到了例外

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

为了解决问题,我使用的是州语System.out.println("test 00X");

我的输出为

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服务器UP。我不知道需要做什么。我相信apache commons将是不错的选择。

有人可以帮助我完成以下步骤

  1. 需要的jar文件
  2. 如何设置smptp
  3. 发送电子邮件(来自任何网站,即来自yahoo或gmail或任何私人电子邮件ID)
  4. 或者

    在java中发送电子邮件的一步一步...

3 个答案:

答案 0 :(得分:1)

严格来说,这不是Java问题。您需要一个外发的SMTP服务器,您可以将其发送到该服务器,并且需要将其发送到正确的google,yahoo,aol服务器。

作为“主机”,您必须设置该SMTP服务器,或者如果您愿意,还可以在您的计算机上安装SMTP服务器,但这是一项艰巨的任务。通常,大公司和服务提供商都有SMTP服务器,可以接受来自网络内部的任何邮件。

但是大多数SMTP服务器都没有打开,并且不允许您发送电子邮件,至少不是免费的。您可以创建一个Gmail帐户,并使用gmail SMTP(smtp.gmail.com),使用您的传输的帐户用户名和密码来验证Google的SMTP服务器。

此外,您不能始终指定“from”标头,它可以被SMTP服务器重写以反映邮件发送的实际帐户,或者如果不是从正确的SMTP到达,则可能被视为另一端的垃圾邮件服务器

我建议你阅读有关SMTP如何工作的内容,这是一个过于复杂且相当陈旧的协议,但值得了解它是如何工作的。

答案 1 :(得分:1)

试试这个......它的工作......

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

答案 2 :(得分:0)

您没有在localhost上运行SMTP邮件服务器:25。您的邮件配置错误,您应该与其他邮件服务器通信,否则您打算与localhost中的一个进行通信,在这种情况下您需要安装和/或运行它。