1. package server;
  2.  
  3. import java.io.*;
  4. import java.net.*;
  5. import java.sql.Time;
  6. import java.util.Scanner;
  7. import java.util.Timer;
  8.  
  9. public class client {
  10.  
  11. /*通过163smtp服务器向其他邮箱发送数据
  12. * 返回码
  13. * 0:未知原因出错
  14. * 1:发送成功
  15. * 2:被判定为垃圾邮件
  16. */
  17. public static int send(Mail mail){
  18. int state=0;
  19. Socket socket=null;
  20. String userName="xxxxxxxxx";//经过base64编码的163邮箱用户名
  21. String password="xxxxxxxxxxxxxx";//经过base64编码的163邮箱密码
  22. BufferedReader reader=null;
  23. PrintWriter writer=null;
  24. try {
  25. // 连接到服务器
  26. socket = new Socket("SMTP.163.com", 25);
  27. reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  28. writer = new PrintWriter(socket.getOutputStream(), true);
  29. System.out.println(reader.readLine());
  30. writer.println("HELO 163");
  31. System.out.println(reader.readLine());
  32. writer.println("auth login");
  33. System.out.println(reader.readLine());
  34. writer.println(userName);
  35. System.out.println(reader.readLine());
  36. writer.println(password);
  37. System.out.println(reader.readLine());
  38. writer.println("mail from:<mailsys163@163.com>");
  39. System.out.println(reader.readLine());
  40. writer.println("rcpt to:<" +mail.getReceiver()+">");
  41. System.out.println(reader.readLine());
  42. //开始发送邮件
  43. writer.println("data");
  44. System.out.println(reader.readLine());
  45. writer.println("subject:"+mail.getSubject());
  46. writer.println("from:"+mail.getSender());
  47. writer.println("to:"+mail.getReceiver());
  48. writer.println("Content-Type: text/plain;charset=\"gb2312\"");
  49. writer.println("");
  50. writer.println(mail.getContent());
  51. writer.println(".");
  52. writer.println("");
  53. String sum=reader.readLine();
  54. System.out.println(sum);
  55. if(sum.indexOf("250")==0){
  56. System.out.println("发送成功");
  57. state=1;
  58. }else if(sum.indexOf("554")==0){
  59. System.out.println("被判定为垃圾邮件");
  60. state=2;
  61. }
  62. writer.println("rset");
  63. System.out.println(reader.readLine());
  64. writer.println("quit");
  65. } catch (IOException e) {
  66. e.printStackTrace();
  67. }finally {
  68. try {
  69. socket.close();
  70. reader.close();
  71. writer.close();
  72. } catch (IOException e) {
  73. // TODO Auto-generated catch block
  74. e.printStackTrace();
  75. }
  76. }
  77. return state;
  78. }
  79.  
  80. public static void main(String[] args){
  81. Mail mail=new Mail("xxxxxxx@163.com","xxxxx@qq.com","你好","吃饭了没");
  82. System.out.println(send(mail));
  83.  
  84. }
  85. }

注意如果是163向163发送邮件,邮件的发送者(mail.sender,不是真实发送者这个必须和认证的用户名相同)可以设置为任意的,这样接收者收到邮件时会看到该邮件由认证的用户代发

但是如果是163向其他邮箱发送邮件,这两个from必须相同,否则大部分情况下都会被163当作是垃圾邮件返回554错误,无发发送

通过163smtp服务器向各大邮箱发送邮件(SOCKET编程)的更多相关文章

  1. 基于JavaMail向邮箱发送邮件

    参考:http://blog.csdn.net/ghsau/article/details/17839983 http://blog.csdn.net/never_cxb/article/detail ...

  2. Java实现网易企业邮箱发送邮件

    最近项目需要用网易企业邮箱发送邮件,特意来将实现过程记录一下: maven导入jar包 <!-- javax.mai 核心包 --> <dependency> <grou ...

  3. 杂项之使用qq邮箱发送邮件

    杂项之使用qq邮箱发送邮件 本节内容 特殊设置 测试代码 1. 特殊设置 之前QQ邮箱直接可以通过smtp协议发送邮件,不需要进行一些特殊的设置,但是最近使用QQ邮箱测试的时候发现以前使用的办法无法奏 ...

  4. DEDECMS会员注册如何配置邮箱发送邮件功能

    网站邮件功能是一个非常基础和有效的通信工具,配合dede会员注册邮件验证功能可以大量的拒绝垃圾注册用户.那么如何配置DEDECMS会员注册邮箱发送邮件功能?   1:配置dedecms网站发信EMAI ...

  5. asp.net使用qq邮箱发送邮件

    using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...

  6. ecshop QQ邮箱发送邮件服务器配置

    ecshop QQ邮箱发送邮件服务器配置 1.邮件服务:采用其他的SMTP服务 2.邮件服务器是否要求加密连接(SSL): 是 此项设置需要php支持openSSL模块 开启方法: a.php.ini ...

  7. rails使用QQ邮箱发送邮件蛋疼的经历

    以前本猫在blog中写过使用ruby发送邮件的博文,其中使用了163和qq的邮箱发送邮件都可以发送成功.但是现在使用rails的发送邮件功能,使用的是qq的邮件服务器发送,死活不可以!要不就是认证失败 ...

  8. SpringBoot使用qq邮箱发送邮件

    最近公司要做一个邮箱注册和重置密码的功能,因为之前就做过,但是不是Springboot项目,所以相对来说还是比较容易的,在这里记录一下. 一.引用Maven依赖 这里使用spring自带的邮件jar包 ...

  9. CentOS7像外部163邮箱发送邮件

    我们在运维过程中,为了随时了解服务器的工作状态,出现问题随时提醒,像个人邮箱发送邮件是必须的,但是刚刚安装好的系统是无法发送邮件的.需要们进行一些配置和程序的安装,我安装完系统后,自带mail12.5 ...

随机推荐

  1. The following control could not be licensed: TXTextControl.TextControl。。解决方案

    在这篇博客中,下面的控制不能授权:txtextcontrol.textcontrol这意味着,找不到合适的许可证来验证控制.一般情况下,许可证将被自动纳入应用程序,通常不必担心许可证的所有. “许可证 ...

  2. 文件夹操作之判断是否存在(Directory)

    Directory类用于操作文件夹,用于创建.移动和枚举目录和子目录的静态方法.DirectoryInfo类用于典型操作,如复制,移动,重命名,创建和删除目录.他们都可用于获取和设置相关属性或有关创建 ...

  3. Autocomplete 自动提示

    <!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  4. Web开发 学习积累20161018

    项目 一.项目做的是什么 业务逻辑 -> 增删改查 二.什么是面向对象编程,它有哪些好处 oop:object oriented programming <>核心思想:使用人类思考问 ...

  5. Java相关脚本

    本人摘自:https://github.com/oldratlee/useful-scripts/blob/master/docs/java.md#beer-show-busy-java-thread ...

  6. 17、多线程 (Thread、线程创建、线程池)

    进程概念 *A:进程概念 *a:进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行, 即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程的概念 *A:线程的概念 *a ...

  7. qt5.6.3下使用firebird

    有人把firebird比作数据库界的瑞士军刀,想学习一下其在QT5.6中的使用,于是便开始了一场自己挖坑,自己埋的旅程. 环境说明:win7 64位+QT5.6 mingw4.9 32位(好像官网上也 ...

  8. HTML5 Web存储 页面间进行传值

    在实际使用过程中,经常会遇到需要在页面间进行传值的情况,最初设想一定需要后端才能进行数据的存储和读取,或者在本地使用一个cookie进行保存,直到了解到HTML5 Web存储 使用HTML5的新特性可 ...

  9. react项目 路径优化

  10. eclipse调试 10个技巧

    先提三点 不要使用System.out.println作为调试工具 启用所有组件的详细的日志记录级别 使用一个日志分析器来阅读日志 1.条件断点 想象一下我们平时如何添加断点,通常的做法是双击行号的左 ...