`

利用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
分享到:
评论

相关推荐

    SMTP/POP邮件客户端,客户端界面MFC,socket,VS2019

    可以实现接收邮件,收件箱邮件列表展示(不要太多,否则会非常慢);实现邮件内容展示,邮件内容采用base64解码,以及utf8转gbk编码,中英文无乱码,对邮件内容进行了裁剪,可能会出现邮件内容展示不全的问题(原因...

    netcan#netcan.github.io#利用telnet在命令行发送-接收邮件1

    废话不多说,这几天在学《计算机网络》,发现telnet其实是个很万能的东西,我曾对它的印象仅仅停留在远程控制,那时候在机房叫老师打开机房的网络,老师在cmd就用

    C#网络应用高级编程

    5.2 利用同步TCP接收电子邮件  5.2.1 POP3工作原理  5.2.2 邮件接收处理  习题  第6章 网络数据加密与解密  6.1 对称加密  6.2 不对称加密  6.3 通过网络传递加密数据 6.4 Hash算法与数字...

    C#学习文档实例讲解

    5.2 利用同步TCP接收电子邮件 120 5.2.1 POP3工作原理 121 5.2.2 邮件接收处理 123 5.3 习题5 127 第6章 网络数据加密与解密 128 6.1 对称加密 128 6.2 不对称加密 133 6.3 通过网络传递加密数据 136 6.4 Hash算法与...

    C#网络核心编程(Word版电子书+PPT+源代码+习题解答)

    5.2 利用同步TCP接收电子邮件 120 5.2.1 POP3工作原理 121 5.2.2 邮件接收处理 123 5.3 习题5 127 第6章 网络数据加密与解密 128 6.1 对称加密 128 6.2 不对称加密 133 6.3 通过网络传递加密数据 136 6.4 Hash算法与...

    深入Java Servlet网络编程

    第12章 在Servlet中发送和接收邮件 12. 1 电子邮件协议 12. 2 利用SMIP发送电子邮件 12. 2. 1 利用网络编程发送邮件 12. 2. 2 利用网络编程发送电子邮件的实例 12. 3 JavaMail API和电子邮件 12. 3. 1 配置...

    基于安卓的音频播放器基于安卓的音频播放器javafx2.0官方例子JavaMAIL1.6JavaMAIL1.6anylogic

    JavaFX Script编程语言(以下称为JavaFX)是Sun微...JavaMail是实现邮件发送和接收功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP、POP3、IMAP,开发人员使用JavaMail编写邮件程序时,无需考虑底层的...

    C#示例(配套光盘源码)第四部分

    实例085 发送与接收邮件 297 实例086 调用OutLook发送邮件 304 实例087 以断点续传方式下载文件 306 实例088 远程关闭与重启计算机 308 实例089 点对点聊天程序设计 311 实例090 网络电台 314 第9章 ...

    SRFMail_Pro:SRF Mail Pro

    SRFMail_Pro ###对于数据库设计中session的解释 根据需求,为解决以下几个问题: 一封邮件同时可以由多个人回复,多个人查看 邮件被分发后可以被退回 回复邮件可以被退回 ...计划利用redis做发送队列 #####mongoos

    Visual C#网络编程技术与实践源代码

     6.2.7 使用多线程发送与接收邮件  6.3 运行效果演示  6.4 本章小结 第7章 FTP下载与文件传输  7.1 FTP协议概述  7.1.1 使用FTP协议下载文件的流程  7.1.2 相关类库说明  7.2 FTP客户端设计  7.2.1...

    JAVA 范例大全 光盘 资源

    实例179 接收邮件 556 实例180 删除邮件 572 实例181 利用Java API发送E-mail 574 第19章 数据库技术 583 实例182 连接各种数据库 583 实例183 创建表结构 587 实例184 表数据的基本操作 590 实例185 ...

    C#开发典型模块大全(光盘)

    8.2.4 使用Jmail组件接收邮件 8.2.5 邮件发送类的使用 8.2.6 使用正则表达式验证邮件格式 8.3 设计过程 8.3.1 数据库设计 8.3.2 系统登录 8.3.3 邮件发送实现 8.3.4 为邮件上传多个附件 8.3.5 邮件接收实现 8.3.6 ...

    C#开发典型模块大全(光盘)第一部分

    8.2.4 使用Jmail组件接收邮件 8.2.5 邮件发送类的使用 8.2.6 使用正则表达式验证邮件格式 8.3 设计过程 8.3.1 数据库设计 8.3.2 系统登录 8.3.3 邮件发送实现 8.3.4 为邮件上传多个附件 8.3.5 邮件接收实现 8.3.6 ...

    C#开发典型模块大全(光盘)第二部分

    8.2.4 使用Jmail组件接收邮件 8.2.5 邮件发送类的使用 8.2.6 使用正则表达式验证邮件格式 8.3 设计过程 8.3.1 数据库设计 8.3.2 系统登录 8.3.3 邮件发送实现 8.3.4 为邮件上传多个附件 8.3.5 邮件接收实现 8.3.6 ...

    C#开发典型模块大全

    8.2.4 使用Jmail组件接收邮件 186 8.2.5 邮件发送类的使用 188 8.2.6 使用正则表达式验证邮件格式 190 8.3 设计过程 191 8.3.1 数据库设计 191 8.3.2 系统登录 191 8.3.3 邮件发送实现 192 8.3.4 为...

    MiGroup:MiGroup - OS X GroupMe 客户端

    MiGroup 是一个轻量级的 OS X GroupMe 客户端,支持发送/接收消息、群组配置文件和成员头像以及离线查看等基本功能。 此外,MiGroup 利用 OS X 10.9 新的“快速回复”通知功能提供本地消息通知,让您无需离开工作...

    Delphi网络通信协议分析与应用实现pdf清晰

    6.1 SMTP及发送电子邮件 6.1.1 SMTP的模型描述 6.1.2 SMTP的会话过程 6.2 POP3与接收电子邮件 6.2.1 POP3的模型描述 6.2.2 POP3的会话过程 6.3 信件结构详述 6.3.1 RFC822信件的格式和内容 6.3.2 构造符合...

    清华大学的计算机网络课件

    但在发送窗口和接收窗口的共同作用下可以在数据传输时提高对信道的利用率。那么到底应当怎样看待发送窗口的作用? 问题3-8:在关于数据链路层工作原理的叙述中,经常会见到两个不同的名词——“丢失”和“丢弃”。...

Global site tag (gtag.js) - Google Analytics