通过163smtp服务器向各大邮箱发送邮件(SOCKET编程)
package server; import java.io.*;
import java.net.*;
import java.sql.Time;
import java.util.Scanner;
import java.util.Timer; public class client { /*通过163smtp服务器向其他邮箱发送数据
* 返回码
* 0:未知原因出错
* 1:发送成功
* 2:被判定为垃圾邮件
*/
public static int send(Mail mail){
int state=0;
Socket socket=null;
String userName="xxxxxxxxx";//经过base64编码的163邮箱用户名
String password="xxxxxxxxxxxxxx";//经过base64编码的163邮箱密码
BufferedReader reader=null;
PrintWriter writer=null;
try {
// 连接到服务器
socket = new Socket("SMTP.163.com", 25);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true);
System.out.println(reader.readLine());
writer.println("HELO 163");
System.out.println(reader.readLine());
writer.println("auth login");
System.out.println(reader.readLine());
writer.println(userName);
System.out.println(reader.readLine());
writer.println(password);
System.out.println(reader.readLine());
writer.println("mail from:<mailsys163@163.com>");
System.out.println(reader.readLine());
writer.println("rcpt to:<" +mail.getReceiver()+">");
System.out.println(reader.readLine());
//开始发送邮件
writer.println("data");
System.out.println(reader.readLine());
writer.println("subject:"+mail.getSubject());
writer.println("from:"+mail.getSender());
writer.println("to:"+mail.getReceiver());
writer.println("Content-Type: text/plain;charset=\"gb2312\"");
writer.println("");
writer.println(mail.getContent());
writer.println(".");
writer.println("");
String sum=reader.readLine();
System.out.println(sum);
if(sum.indexOf("250")==0){
System.out.println("发送成功");
state=1;
}else if(sum.indexOf("554")==0){
System.out.println("被判定为垃圾邮件");
state=2;
}
writer.println("rset");
System.out.println(reader.readLine());
writer.println("quit");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
socket.close();
reader.close();
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return state;
} public static void main(String[] args){
Mail mail=new Mail("xxxxxxx@163.com","xxxxx@qq.com","你好","吃饭了没");
System.out.println(send(mail)); }
}
注意如果是163向163发送邮件,邮件的发送者(mail.sender,不是真实发送者这个必须和认证的用户名相同)可以设置为任意的,这样接收者收到邮件时会看到该邮件由认证的用户代发

但是如果是163向其他邮箱发送邮件,这两个from必须相同,否则大部分情况下都会被163当作是垃圾邮件返回554错误,无发发送
通过163smtp服务器向各大邮箱发送邮件(SOCKET编程)的更多相关文章
- 基于JavaMail向邮箱发送邮件
参考:http://blog.csdn.net/ghsau/article/details/17839983 http://blog.csdn.net/never_cxb/article/detail ...
- Java实现网易企业邮箱发送邮件
最近项目需要用网易企业邮箱发送邮件,特意来将实现过程记录一下: maven导入jar包 <!-- javax.mai 核心包 --> <dependency> <grou ...
- 杂项之使用qq邮箱发送邮件
杂项之使用qq邮箱发送邮件 本节内容 特殊设置 测试代码 1. 特殊设置 之前QQ邮箱直接可以通过smtp协议发送邮件,不需要进行一些特殊的设置,但是最近使用QQ邮箱测试的时候发现以前使用的办法无法奏 ...
- DEDECMS会员注册如何配置邮箱发送邮件功能
网站邮件功能是一个非常基础和有效的通信工具,配合dede会员注册邮件验证功能可以大量的拒绝垃圾注册用户.那么如何配置DEDECMS会员注册邮箱发送邮件功能? 1:配置dedecms网站发信EMAI ...
- asp.net使用qq邮箱发送邮件
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...
- ecshop QQ邮箱发送邮件服务器配置
ecshop QQ邮箱发送邮件服务器配置 1.邮件服务:采用其他的SMTP服务 2.邮件服务器是否要求加密连接(SSL): 是 此项设置需要php支持openSSL模块 开启方法: a.php.ini ...
- rails使用QQ邮箱发送邮件蛋疼的经历
以前本猫在blog中写过使用ruby发送邮件的博文,其中使用了163和qq的邮箱发送邮件都可以发送成功.但是现在使用rails的发送邮件功能,使用的是qq的邮件服务器发送,死活不可以!要不就是认证失败 ...
- SpringBoot使用qq邮箱发送邮件
最近公司要做一个邮箱注册和重置密码的功能,因为之前就做过,但是不是Springboot项目,所以相对来说还是比较容易的,在这里记录一下. 一.引用Maven依赖 这里使用spring自带的邮件jar包 ...
- CentOS7像外部163邮箱发送邮件
我们在运维过程中,为了随时了解服务器的工作状态,出现问题随时提醒,像个人邮箱发送邮件是必须的,但是刚刚安装好的系统是无法发送邮件的.需要们进行一些配置和程序的安装,我安装完系统后,自带mail12.5 ...
随机推荐
- 基础爬虫,谁学谁会,用requests、正则表达式爬取豆瓣Top250电影数据!
爬取豆瓣Top250电影的评分.海报.影评等数据! 本项目是爬虫中最基础的,最简单的一例: 后面会有利用爬虫框架来完成更高级.自动化的爬虫程序. 此项目过程是运用requests请求库来获取h ...
- Golang build命令解析
go build,是我们非常常用的命令,它可以启动编译,把我们的包和相关的依赖编译成一个可执行的文件. usage: go build [-o output] [-i] [build flags] [ ...
- Codeforces 985G. Team Players
Description 有 \(n\) 个人 , \(m\) 对人有冲突 , 你要从这 \(n\) 个人中选出三个人成为一组 , 使得同一组的人不存在一对有冲突 题面 Solution 容斥 答案=总 ...
- 使用 Angular 和 RxJS 实现的无限滚动加载
无限滚动加载应该是怎样的? 无限滚动加载列表在用户将页面滚动到指定位置后会异步加载数据.这是避免寻主动加载(每次都需要用户去点击)的好方法,而且它能真正保持应用的性能.同时它还是降低带宽和增强用户体验 ...
- WCF-netTcpBinding端口共享
在同一台机器上一个端口在某时刻只能被一个应用程序占用.对于WCF服务来说,如果服务器上有多个服务并且这些服务寄宿在不同的应用程序中,我们需要某种途径来共享它们的端口.下面是一个示例来演示使用TcpBi ...
- JavaScript数组的三种定义方法
数组的定义: <script type="text/javascript"> // <!--声明数组--> // 1.先声明数组长度,后进行赋值 var a ...
- SVG 旋转图形实例
本实例展示如何在SVG中画出一个正方形并使之旋转.运行结果如下图所示: 在文本框中输入时间间隔,单位是毫秒.点击Start按钮,蓝色方块就会开始转动,每个时间间隔变化一度.变换的角度在下面的Angle ...
- Hadoop源码学习笔记(3) ——初览DataNode及学习线程
Hadoop源码学习笔记(3) ——初览DataNode及学习线程 进入了main函数,我们走出了第一步,接下来看看再怎么走: public class DataNode extends Config ...
- [javaSE] 多线程通信(等待-唤醒机制)
两个线程操作同一个资源,比如,输入和输出,操作同一个对象,此时两个线程会争夺cpu的执行权,随机的进行切换.我们想实现先输入再输出,顺序的执行 目标对象定义一个标记字段,进行判断,wait()和not ...
- CSS实现文字两端对齐
最近的项目遇到了这样的需求:(要求标题部分不管文字多少,都必须两端对齐) 如下图: 当时也没有多想直接使用‘ ’进行代替,毕竟产品同学想快一点看到效果,不敢怠慢!不过到第二个页面就傻眼了. 如图: 这 ...