`

利用socket发送接收邮件(转)

阅读更多
这是在网上摘的,执行接收邮件出现:530 Authentication required,不知如何解决??请大家帮助之
发送邮件
import java.net.*;
import java.io.*;
/**
* <p>Title: 使用SMTP发送邮件</p>
* <p>Description: 本实例通过使用socket方式,根据SMTP协议发送邮件</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Filename: sendSMTPMail.java</p>
* @author 杜江
* @version 1.0
*/
public class sendSMTPMail {
/**
*<br>方法说明:主方法
*<br>输入参数:1。服务器ip;2。对方邮件地址
*<br>返回类型:
*/        
public static void main(String[] arges) {
  if(arges.length!=2){
           System.out.println("use java sendSMTPMail hostname | mail to");
           return;
          }
   sendSMTPMail t = new sendSMTPMail();
   t.sendMail(arges[0], arges[1]);
   }
/**
*<br>方法说明:发送邮件
*<br>输入参数:String mailServer 邮件接收服务器
*<br>输入参数:String recipient 接收邮件的地址
*<br>返回类型:
*/
public void sendMail(String mailServer, String recipient) {
   try {
             //有Socket打开25端口
      Socket s = new Socket(mailServer, 25);
      //缓存输入和输出
      BufferedReader in = new BufferedReader
          (new InputStreamReader(s.getInputStream(), "8859_1"));
      BufferedWriter out = new BufferedWriter
          (new OutputStreamWriter(s.getOutputStream(), "8859_1"));
      //发出“HELO”命令,表示对服务器的问候
      send(in, out, "HELO theWorld");
      //告诉服务器我的邮件地址,有些服务器要校验这个地址
      send(in, out, "MAIL FROM: <hnzhoujunmei@sina.com>");
      //使用“RCPT TO”命令告诉服务器解释邮件的邮件地址
      send(in, out, "RCPT TO: " + recipient);
      //发送一个“DATA”表示下面将是邮件主体
      send(in, out, "DATA");
      //使用Subject命令标注邮件主题
      send(out, "Subject: 这是一个测试程序!");
      //使用“From”标注邮件的来源
      send(out, "From: riverwind <hnzhoujunmei@sina.com>");
      send (out, "\n");
      //邮件主体
      send(out, "这是一个使用SMTP协议发送的邮件!如果打扰请删除!");
      send(out, "\n.\n");
      //发送“QUIT”端口邮件的通讯
      send(in, out, "QUIT");
      s.close();
      }
   catch (Exception e) {
      e.printStackTrace();
      }
   }
/**
*<br>方法说明:发送信息,并接收回信
*<br>输入参数:
*<br>返回类型:
*/
public void send(BufferedReader in, BufferedWriter out, String s) {
   try {
      out.write(s + "\n");
      out.flush();
      System.out.println(s);
      s = in.readLine();
      System.out.println(s);
      }
   catch (Exception e) {
      e.printStackTrace();
      }
   }
/**
*<br>方法说明:重载方法。向socket写入信息
*<br>输入参数:BufferedWriter out 输出缓冲器
*<br>输入参数:String s 写入的信息
*<br>返回类型:
*/
public void send(BufferedWriter out, String s) {
   try {
      out.write(s + "\n");
      out.flush();
      System.out.println(s);
      }
   catch (Exception e) {
      e.printStackTrace();
      }
   }
}


接收邮件
import java.io.*;
import java.net.*;
/**
* <p>Title: SMTP协议接收邮件</p>
* <p>Description: 通过Socket连接POP3服务器,使用SMTP协议接收邮件服务器中的邮件</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Filename: </p>
* @author 杜江
* @version 1.0
*/
class POP3Demo
{
/**
*<br>方法说明:主方法,接收用户输入
*<br>输入参数:
*<br>返回类型:
*/
  public static void main(String[] args){
          if(args.length!=3){
           System.out.println("USE: java POP3Demo mailhost user password");
          }
          new POP3Demo().receive(args[0],args[1],args[2]);
  }
/**
*<br>方法说明:接收邮件
*<br>输入参数:String popServer 服务器地址
*<br>输入参数:String popUser 邮箱用户名
*<br>输入参数:String popPassword 邮箱密码
*<br>返回类型:
*/
  public static void receive (String popServer, String popUser, String popPassword)
  {
   String POP3Server = popServer;
   int POP3Port = 110;
   Socket client = null;
   try
   {
     // 创建一个连接到POP3服务程序的套接字。
     client = new Socket (POP3Server, POP3Port);
     //创建一个BufferedReader对象,以便从套接字读取输出。
     InputStream is = client.getInputStream ();
     BufferedReader sockin;
     sockin = new BufferedReader (new InputStreamReader (is));
     //创建一个PrintWriter对象,以便向套接字写入内容。
     OutputStream os = client.getOutputStream ();
     PrintWriter sockout;
     sockout = new PrintWriter (os, true); // true for auto-flush
     // 显示POP3握手信息。
     System.out.println ("S:" + sockin.readLine ());
     
     /*--   与POP3服务器握手过程   --*/     
      System.out.print ("C:");
      String cmd = "user "+popUser;
      // 将用户名发送到POP3服务程序。
      System.out.println (cmd);
      sockout.println (cmd);
      // 读取POP3服务程序的回应消息。
      String reply = sockin.readLine ();
      System.out.println ("S:" + reply);

      System.out.print ("C:");
      cmd = "pass ";
      // 将密码发送到POP3服务程序。
      System.out.println(cmd+"*********");
      sockout.println (cmd+popPassword);
      // 读取POP3服务程序的回应消息。
      reply = sockin.readLine ();
      System.out.println ("S:" + reply);
      
           
      System.out.print ("C:");
      cmd = "stat";
      // 获取邮件数据。
      System.out.println(cmd);
      sockout.println (cmd);
      // 读取POP3服务程序的回应消息。
      reply = sockin.readLine ();
      System.out.println ("S:" + reply);
      if(reply==null) return;
      System.out.print ("C:");
      cmd = "retr 1";
      // 将接收第一丰邮件命令发送到POP3服务程序。
      System.out.println(cmd);
      sockout.println (cmd);
      
      // 输入了RETR命令并且返回了成功的回应码,持续从套接字读取输出, 
      // 直到遇到<CRLF>.<CRLF>。这时从套接字读出的输出就是邮件的内容。
      if (cmd.toLowerCase ().startsWith ("retr") &&
        reply.charAt (0) == '+')
        do
        {
          reply = sockin.readLine ();
          System.out.println ("S:" + reply);
          if (reply != null && reply.length () > 0)
            if (reply.charAt (0) == '.')
              break;
        }
        while (true);
      cmd = "quit";
      // 将命令发送到POP3服务程序。
      System.out.print (cmd);
      sockout.println (cmd);     
   }
   catch (IOException e)
   {
     System.out.println (e.toString ());
   }
   finally
   {
     try
     {  if (client != null)
          client.close ();
     }
     catch (IOException e)
     {
     }
   }
  }
}


源码见附件

附件SMTPMail.rar是另外一个例子,出现如下错误
java.io.IOException: 指定源地址失败
	at client.SMTPClient.mailfrom(SMTPClient.java:108)
	at client.SMTPClient.sendMail(SMTPClient.java:47)
	at servlet.SendMailSMTP.doPost(SendMailSMTP.java:35)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
  • src.rar (2.5 KB)
  • 下载次数: 19
分享到:
评论

相关推荐

    socket实现简单邮件发送

    标题中的“socket实现简单邮件发送”指的是利用套接字(Socket)编程技术来发送电子邮件。在计算机网络中,Socket是应用程序通过编程接口与操作系统进行通信的桥梁,它允许程序发送和接收数据。在这个项目中,我们将...

    socket:发送邮件的php类库

    了解如何使用socket发送邮件也能帮助开发者更好地理解和调试邮件发送问题,尤其是在遇到常规邮件函数(如`mail()`)无法解决的情况时。 总的来说,这个PHP类库利用socket功能实现了SMTP邮件发送,为开发者提供了一种...

    java基于socket 利用1邮件服务器发送邮件

    它提供了丰富的接口和类,可以方便地创建、发送、接收邮件。在本项目中,我们需要重点关注`javax.mail`和`javax.mail.internet`这两个包,它们包含了发送邮件所需的核心类和方法。 1. **配置邮件服务器** 在使用...

    基于java的简单socket邮件发送

    在这个"基于Java的简单socket邮件发送"实验中,我们将深入探讨如何利用Java的Socket类来构建一个基本的邮件发送系统。 首先,我们需要了解Socket的工作原理。Socket是TCP/IP协议的一部分,它为两台计算机提供了一个...

    gtk+socket+linux邮件接收系统

    在这个系统中,SMTP协议被用于与邮件服务器进行通信,接收邮件。通常,邮件接收涉及IMAP(Internet Message Access Protocol)或POP3(Post Office Protocol version 3),但这里提到的是SMTP,可能意味着该系统首先...

    socket:发送邮件的php类库.zip

    `socket_read()`用于接收服务器的响应,确保邮件发送过程中的每个步骤都能正确执行。 SMTP(Simple Mail Transfer Protocol)是互联网上传输电子邮件的标准协议。使用SMTP发送邮件通常包括以下步骤: 1. 建立连接:...

    socket邮件客户端

    Socket邮件客户端是一款基于Socket编程技术实现的电子邮件应用程序,它允许用户通过SMTP(简单邮件传输协议)发送邮件,并通过POP3(邮局协议)或IMAP(互联网消息访问协议)接收邮件。这款客户端的独特之处在于其...

    php中Socket发送邮件验证邮箱的类

    在PHP编程中,使用...通过研究这些文件,你可以更深入地理解如何在PHP中利用Socket发送邮件验证邮箱的有效性。同时,确保在实际使用时遵循最佳实践,尊重用户隐私,并遵守相关的法律和政策,以免引起不必要的问题。

    Socket收发邮件

    SMTP用于发送邮件,而POP3用于接收邮件。使用Socket与SMTP服务器和POP3服务器建立连接后,我们可以通过发送特定的命令来进行邮件操作。 1. **SMTP协议**:SMTP是基于TCP/IP的协议,用于从客户端向邮件服务器发送...

    基于ApacheJames邮件服务器的收发邮件代码及服务

    在本项目中,我们将探讨如何利用Apache James来实现邮件的发送与接收,并通过JavaMail API进行相关的编程操作。 1. **Apache James邮件服务器的安装与配置** - 下载Apache James最新版本的源码或二进制包。 - ...

    java socket 邮件客户端

    Java Socket邮件客户端是一种基于Java编程语言,利用Socket通信协议实现的邮件收发工具。它能够帮助开发者通过编程接口与邮件服务器进行交互,实现发送、接收邮件的功能。在本项目中,"LaserMail.2.03BLOOD"可能是这...

    Java编程实现邮件发送(含身份验证)

    本教程将深入讲解如何利用Java实现邮件的发送,并包含身份验证的过程,这对于自动化任务、通知系统或者任何需要通过电子邮件进行通信的应用来说是至关重要的。 首先,我们来了解计算机网络中的Socket编程。Socket是...

    java socket 实现SMTP协议 发送邮件.docx

    利用 Java 的 Socket 编程技术结合 SMTP (Simple Mail Transfer Protocol) 协议,可以实现从应用程序直接发送邮件的功能。下面将详细介绍如何使用 Java Socket 实现这一目标。 #### 一、SMTP 协议简介 SMTP 是一种...

    利用visual c++发送邮件

    在发送邮件时,需要按照SMTP的交互流程,逐个发送命令并接收服务器的响应。例如,先发送“HELO”命令,然后设置发件人和收件人地址,再发送邮件内容,最后使用“QUIT”命令结束会话。 在处理附件时,需要使用MIME...

    socket应用(三) 用C语言编写发送邮件程序 源代码

    在这个项目中,我们将利用SMTP(Simple Mail Transfer Protocol)协议,这是互联网上用于发送电子邮件的标准协议。 首先,我们需要了解SMTP的基本工作流程。SMTP服务器接收来自客户端的邮件,并将其转发到指定的收...

    利用winsock类编写的收发邮件程序

    在利用Winsock编写的收发邮件程序中,我们通常会使用SMTP(Simple Mail Transfer Protocol)来发送邮件,以及POP3(Post Office Protocol version 3)或IMAP4(Internet Message Access Protocol version 4)来接收...

    计算机网络实验SMTP邮件发送系统socket编程 (2).docx

    `Initialize`函数负责初始化Winsock环境,而`MailSend`则执行SMTP协议流程,通过socket发送邮件指令和内容。 【实验步骤】 1. 创建VC6工程,设置好包含和库路径。 2. 编写SMTP协议相关的函数和类,实现邮件发送逻辑...

    c语言实现发送电子邮件,读取电子邮件内容

    发送和接收邮件可能涉及多种编码,如ASCII、Base64、MIME等。在C语言中,你需要理解和使用这些编码方式来正确地处理邮件内容和附件。 在`pop3.c`和`smtp.c`这两个文件中,我们可以预见到它们分别实现了POP3和SMTP...

Global site tag (gtag.js) - Google Analytics