免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2338 | 回复: 0
打印 上一主题 下一主题

请问一个554的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-04 18:57 |只看该作者 |倒序浏览
用JAVA的socket写了一个邮件发送程序,能顺利执行,但是最后老是返回“554 this mail is rejected by antispam system”,说是被当成垃圾邮件拒绝了,原因应该出在"HELO "+REMOTE_HOST。既然foxmail能否发送那必然有解决之道,大家有弄过这些东西吗?这个应该如何设置呢?多谢,请看代码

  1. package org.server;

  2. import java.io.*;
  3. import java.net.*;
  4. import sun.misc.*;

  5. public class MailSender
  6. {
  7.         private String SMTP_SERVER = "smtp.189.cn";
  8.         private String REMOTE_HOST = "127.0.0.1";
  9.         private int SMTP_PORT = 25;
  10.         private String SENDER = "*@189.cn";//发送者的邮件地址
  11.         private String RECEIVER = "*@163.com";//接受者的邮件地址
  12.         private Socket socket = null;
  13.         private int WAIT_TIME = 60000;
  14.         private InetAddress remoteAdd = null;
  15.         private BufferedReader br = null;
  16.         private PrintWriter pw = null;
  17.         private String name = "name";
  18.         private String pass = "pass";
  19.        
  20.         private void sendMail()
  21.         {
  22.                 socket = new Socket();
  23.                 System.out.println("开始连接"+SMTP_SERVER+"...");
  24.                 long begin = System.currentTimeMillis();
  25.                 String subject = "Test";
  26.                 String msg = "Symbian OS";
  27.                 String content = "Subject:"+subject+"\r\n"+msg;
  28.                 try
  29.                 {
  30.                         socket.setReuseAddress(true);
  31.                         remoteAdd = InetAddress.getByName(SMTP_SERVER);
  32.                         SocketAddress address = new InetSocketAddress(remoteAdd,SMTP_PORT);
  33.                         socket.connect(address,WAIT_TIME);
  34.                         long end = System.currentTimeMillis();
  35.                         System.out.println("连接"+SMTP_SERVER+"成功...");
  36.                         System.out.println("耗时"+(end-begin)+"ms");
  37.                         br = getReader(socket);
  38.                         pw = getWriter(socket);
  39.                         //String REMOTE_HOST = InetAddress.getByName(SMTP_SERVER).toString();
  40.                         System.out.println("Client>"+REMOTE_HOST);
  41.                         String username = new BASE64Encoder().encode(name.getBytes());
  42.                         String password = new BASE64Encoder().encode(pass.getBytes());
  43.                         System.out.println("发送验证信息及邮件...");
  44.                         sendAndReceive(null,br,pw);
  45.                         sendAndReceive("HELO "+REMOTE_HOST,br,pw);
  46.                         sendAndReceive("AUTH LOGIN",br,pw);
  47.                         sendAndReceive(username,br,pw);
  48.                         sendAndReceive(password,br,pw);
  49.                         sendAndReceive("MAIL FROM:<"+SENDER+">",br,pw);
  50.                         sendAndReceive("RCPT TO:<"+RECEIVER+">",br,pw);
  51.                         sendAndReceive("DATA",br,pw);
  52.                         pw.println(content);
  53.                         System.out.println("Client>"+content);
  54.                         sendAndReceive(".",br,pw);
  55.                         sendAndReceive("QUIT",br,pw);
  56.                 }
  57.                 catch(SocketException err)
  58.                 {
  59.                         err.printStackTrace();
  60.                 }
  61.                 catch(UnknownHostException err)
  62.                 {
  63.                         err.printStackTrace();
  64.                 }
  65.                 catch(IOException err)
  66.                 {
  67.                         err.printStackTrace();
  68.                 }
  69.                 finally
  70.                 {
  71.                         if(br!=null)
  72.                         {
  73.                                 try
  74.                                 {
  75.                                         br.close();
  76.                                 }
  77.                                 catch(IOException err)
  78.                                 {
  79.                                         err.printStackTrace();
  80.                                 }
  81.                         }
  82.                         if(pw!=null)
  83.                         {
  84.                                 pw.close();
  85.                         }
  86.                         if(socket!=null)
  87.                         {
  88.                                 try
  89.                                 {
  90.                                         socket.close();
  91.                                 }
  92.                                 catch(IOException err)
  93.                                 {
  94.                                         err.printStackTrace();
  95.                                 }
  96.                         }
  97.                 }
  98.         }
  99.        
  100.         private PrintWriter getWriter(Socket socket)
  101.         {
  102.                 OutputStream socketOut = null;
  103.                 try
  104.                 {
  105.                         socketOut = socket.getOutputStream();
  106.                 }
  107.                 catch(IOException err)
  108.                 {
  109.                         err.printStackTrace();
  110.                 }
  111.                 return new PrintWriter(socketOut,true);
  112.         }
  113.        
  114.         private BufferedReader getReader(Socket socket)
  115.         {
  116.                 InputStream socketIn = null;
  117.                 try
  118.                 {
  119.                         socketIn = socket.getInputStream();
  120.                 }
  121.                 catch(IOException err)
  122.                 {
  123.                         err.printStackTrace();
  124.                 }
  125.                 return new BufferedReader(new InputStreamReader(socketIn));
  126.         }
  127.         /*发送并接收服务器的响应数据*/
  128.         private void sendAndReceive(String str,BufferedReader br,PrintWriter pw)
  129.         {
  130.                 try
  131.                 {
  132.                         if(str!=null)
  133.                         {
  134.                                 System.out.println("Client>"+str);
  135.                                 pw.println(str);
  136.                         }
  137.                         String response;
  138.                         if((response=br.readLine())!=null)
  139.                         {
  140.                                 System.out.println("Server>"+response);
  141.                         }
  142.                 }
  143.                 catch(IOException err)
  144.                 {
  145.                         err.printStackTrace();
  146.                 }
  147.         }
  148.        
  149.         public static void main(String args[])
  150.         {
  151.                 new MailSender().sendMail();
  152.         }
  153. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP