在没有JavaMail API的情况下在java中发送电子邮件

时间:2011-07-31 15:21:31

标签: java email classpath javamail

我正在开发一个应用程序,用户可以选择每隔x分钟向指定的电子邮件发送一封电子邮件。

我不想依赖JavaMail(即依赖于我的用户是否已将JavaMail jar添加到其类路径中)。

我意识到我可以继续创建一个服务器来执行此操作并使用必要的详细信息连接到它,但这是最后一个选项。

在这种情况下,我如何继续发送电子邮件?

是否有任何在线服务(付费或免费)为此提供解决方案?例如,连接到它们并指定收件人电子邮件和消息,他们将处理电子邮件发送。

是否有使用Java Core软件包发送电子邮件的智能和/或相当简单的方法?

谢谢:)

麦克

2 个答案:

答案 0 :(得分:2)

您可以 - 通过打开到smtp服务器的套接字然后写入该套接字。

Socket socket=new Socket("your.smtp.server",25);
br= new BufferedReader(newInputStreamReader(socket.getInputStream()));
os = socket.getOutputStream();
    smtp("HELLO " + toEmailAddress);
smtp("MAIL FROM: "+ fromEmailAddress);
smtp("DATA");
smtp(yourContent");

并且你的smtp方法只是从bufferedreader读取并写入socket

    public void smtp(String command) { 
           br.readLine();
           os.write(command.getBytes());
    }

答案 1 :(得分:1)

这里有一些旧代码,我可能会让你开始:

import java.io.*;
import java.net.*;

class EMail2
{
    public static void main(String args[])
    {

        if ( args.length != 5 )
        {
            System.out.print("usage: java EMail2 <smtp-host> <fromName> <toAddress>");
            System.out.println(" <subject> <body>");
            System.exit(-1);
        }

        try
        {
            send(args[0], args[1], args[2], args[3], args[4]);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        System.exit(0);
    }

    public static void send(String host, String from, String to, String subject, String message)
    {
        try
        {
            System.setProperty("mail.host", host);
//          System.setProperty("mail.smtp.starttls.enable","true"); // not sure it this works or not

          // open connection using java.net internal "mailto" protocol handler
          URL url = new URL("mailto:" + to);
          URLConnection conn = url.openConnection();
          conn.connect();

          // get writer into the stream
          PrintWriter out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream() ) );

          // write out mail headers
          // From header in the form From: "alias" <email>
          out.println("From: \"" + from + "\" <" + from + ">");
          out.println("To: " + to);
          out.println("Subject: " + subject);
          out.println(); // blank line to end the list of headers

          // write out the message
          out.println(message);

          // close the stream to terminate the message
          out.close();
        }
        catch(Exception err)
        {
          System.err.println(err);
        }
      }
}