Java通过socket实现smtp协议发送邮件
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
/**
* @author zhaohongbing
*
*/
@SuppressWarnings("unused")
public class SockerMail {
String mailServer;
String from;
String to;
String subject;
String content;
String lineFeet = "\r\n";
private int port = 25;
Socket client;
BufferedReader bf;
DataOutputStream dos;
public String getContent(){
return content;
}
public void setContent(String content){
this.content = content;
}
public String getMailServer(){
return mailServer;
}
public void setMailServer(String mailServer){
this.mailServer = mailServer;
}
public String getFrom(){
return from;
}
public void setFrom(String from){
this.from = from;
}
public String getTo(){
return to;
}
public void setTo(String to){
this.to = to;
}
public String getSubject(){
return subject;
}
public void setSubject(String sub){
this.subject = sub;
}
/**
* 初始化连接
* @return
*/
private boolean init(){
System.out.println("init be invoke");
boolean boo = true;
if(mailServer == null || "".equals(mailServer)){
return false;
}
try{
client = new Socket(mailServer, port);
bf = new BufferedReader(new InputStreamReader(client.getInputStream()));
dos = new DataOutputStream(client.getOutputStream());
String isConnect = getResponse();
if(isConnect.startsWith("220")){
}else{
System.out.println("建立连接失败: "+isConnect);
boo = false;
}
}catch(UnknownHostException e){
System.out.println("建立连接失败!");
e.printStackTrace();
boo = false;
}catch(IOException e){
System.out.println("读取流数据失败!");
e.printStackTrace();
boo = false;
}
System.out.println("init result = " +boo);
return boo;
}
/**
* 发送smtp指令
* 并返回服务器响应信息
* @param msg
* @return
*/
private String sendCommand(String msg){
String result = null;
try{
dos.writeBytes(msg);
dos.flush();
result = getResponse();
}catch(IOException e){
e.printStackTrace();
}
return result;
}
/**
* 读取服务器端响应信息
* @return
*/
private String getResponse(){
String result = null;
try{
result = bf.readLine();
}catch(IOException e){
e.printStackTrace();
}
return result;
}
/**
* 关闭
*/
private void close(){
try{
dos.close();
bf.close();
client.close();
}catch(IOException e){
e.printStackTrace();
}
}
public boolean sendMail(){
//初始化
if(client == null){
if(init()){
}else{
return false;
}
}
//判断 from, to
if(from == null || from.isEmpty() || to == null || to.isEmpty()){
return false;
}
//进行握手
String result = sendCommand("HELO "+mailServer +lineFeet);
if(isStartWith(result, "250")){
System.out.println("握手结果:"+true);
}else{
System.out.println("握手失败:"+result);
return false;
}
//验证发信人信息
// String auth = sendCommand("AUTH LOGIN"+lineFeet);
// if(isStartWith(auth,"334")){
// System.out.println("验证发信人信息结果:"+true);
// }else{
// return false;
// }
// String user = sendCommand(new String(Base64.encode("anszhao@163.com".getBytes()))+lineFeet);
// System.out.println("user = " +user);
// if(isStartWith(user, "334")){
// System.out.println("验证user信息结果:"+true);
// }else{
// return false;
// }
// String pass = sendCommand(new String(Base64.encode("".getBytes()))+lineFeet);
// System.out.println("pass = " +pass);
// if(isStartWith(pass, "235")){
// System.out.println("验证pass信息结果:"+true);
// }else{
// System.out.println("验证pass信息结果:"+false);
// return false;
// }
//发送指令
String f = sendCommand("Mail From:<"+from+">"+lineFeet);
System.out.println("发送指令结果:"+f);
if(isStartWith(f,"250")){
System.out.println("发送指令结果:"+true);
}else{
System.out.println("发送指令结果:"+false);
return false;
}
String toStr = sendCommand("RCPT TO:<"+to+">"+lineFeet);
System.out.println("验证toStr结果:"+toStr);
if(isStartWith(toStr,"250")){
System.out.println("验证toStr结果:"+true);
}else{
return false;
}
String data = sendCommand("DATA"+lineFeet);
if(isStartWith(data,"354")){
System.out.println("验证data信息结果:"+true);
}else{
return false;
}
StringBuilder sb = new StringBuilder();
sb.append("From:<"+from+">"+lineFeet);
sb.append("To:<"+to+">"+lineFeet);
sb.append("Subject:" +subject+lineFeet);
sb.append("Date:2014/06/27 17:30"+lineFeet);
sb.append("Content-Type:text/plain;charset=\"GB2312\",\"UTF-8\""+lineFeet);
sb.append(lineFeet);
sb.append(content);
sb.append(lineFeet+"."+lineFeet);
String conStr = sendCommand(sb.toString());
if(isStartWith(conStr,"250")){
System.out.println("验证conStr信息结果:"+true);
}else{
return false;
}
//quit
String quit = sendCommand("QUIT"+lineFeet);
if(isStartWith(quit,"221")){
System.out.println("验证quit信息结果:"+true);
}else{
return false;
}
close();
return true;
}
/**
*
* 检查字符串开头
*/
private boolean isStartWith(String res, String with){
return res.startsWith(with);
}
/**
* @param args
*/
public static void main(String[] args) {
SockerMail mail = new SockerMail();
mail.setMailServer("stmp.mail.163.com");
mail.setFrom("anson@163.com");
mail.setTo("anson@163.com");
mail.setSubject("[Test Email]");
mail.setContent("Hello,this is a test mail, please replay me if you have receviced it");
boolean boo = mail.sendMail();
if(boo){
System.out.println("邮件发送成功");
}else{
System.out.println("邮件发送失败");
}
}
}
Java通过socket实现smtp协议发送邮件的更多相关文章
- 使用java mail的网易smtp协议 发送邮件
package com.enation.newtest; import java.security.GeneralSecurityException; import java.util.Propert ...
- PHP用socket连接SMTP服务器发送邮件
PHP用socket连接SMTP服务器发送邮件 PHP用socket连接SMTP服务器发送邮件学习实验记录: 分析与SMTP会话的一般流程 1. HELO XXX \r\n //XXX就是自己起个名字 ...
- SMTP 协议发送邮件的整体过程
使用 SMTP 发送邮件_使用 SMTP 发送邮件_发送邮件_用户指南_邮件推送-阿里云 https://help.aliyun.com/knowledge_detail/51622.html 通过 ...
- java实现发送邮件服务器,SMTP协议发送邮件
1.采用SMTP的邮件发送协议.准备:在网易注册一个邮箱,进入设置开启SMTP/pop3协议 2.接下来就是java代码实现了,下面都有注释,就不多做解释了. public class mail { ...
- 通过telnet使用smtp协议发送邮件
smtp协议是一个简单的邮件传输协议,利用它我们可以将邮件发送给别人,这里将通过telnet这个程序利用smtp协议从网易向gmail发送一封邮件 网上不少有说使用telnet发送邮件的文章,我也看过 ...
- 使用SMTP协议发送邮件
class Program { static void Main(string[] args) { ) { try { inputmodel obj = new inputmodel(args); S ...
- C语言利用SMTP协议发送邮件
#ifdef WIN32 #include <windows.h> #include <stdio.h> #else #include <stdio.h> #inc ...
- Java的socket服务UDP协议
练习1 接收类 package com.socket.demo; import java.io.IOException; import java.net.DatagramPacket; import ...
- QTP使用Smtp协议发送邮件
NameSpace = "http://schemas.microsoft.com/cdo/configuration/" Set Email = CreateObject(&qu ...
随机推荐
- asp:get请求写法
写在前面的话 XMLHttpRequest对象的open方法的第一个参数为request-type,取值可以为get或post.本篇介绍get请求. get请求的目的,主要是为了获取数据.虽然get请 ...
- oracle创建存储过程并返回结果集(附C#调用代码)
使用存储过程中,最常用的莫过于查询数据表,并返回结果集. 在SQL SERVER 中,这类操作最简单,通过简单的select * from xx 即可完成.但是在Oracle中并不支持这种写法,那么我 ...
- android 登陆案例
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABEMAAAJuCAIAAADU3FtnAAAgAElEQVR4nOydZ3Rc1dX3nbXez2+erC
- 九度OJ 1410 垒积木 -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1410 题目描述: 给你一些长方体的积木,问按以下规则能最多垒几个积木. 1 一个积木上面最多只能垒另一个积木. 2 ...
- 使用json方式实现省市两级下拉级联菜单[原创]
本文为博主原创,转载请注明. 首先看一下实现后的效果图: 当然,要完成这个实验,mysql必须与数据库连接,这里选用navicat for mysql这款软件,它与mysql的契合度是很高的,配置环境 ...
- 在Mac OS X中搭建STM32开发环境(1)
本文原创于http://www.cnblogs.com/humaoxiao,非法转载者请自重! 本文方法必须好用!绝不坑爹!看了N多英文资料才搞明白的,适用于STM32F4DISCOVERY评估板,带 ...
- unix 常用命令
(一)基本命令 命令格式: 命令 参数 1.ls 显示文件名,等同于dos下dir命令 命令格式:ls [option] file option: -l 显示详细列表 域1 :文件类型和文件权限 域2 ...
- composer php依赖管理工具
#composer是什么 Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. composer出现之前我们php项目依赖管理大部分都是手动 ...
- 调试NodeJS应用
OS:Windows 1.下载安装NodeJS 点击http://nodejs.org/界面上“Install”,下载后运行安装,默认安装到到C:\Program Files\nodejs.安装后确认 ...
- 2011年-CUshell编程大赛
今天群里有人在做练习时遇到一个问题,$0中的分隔符使用OFS没有成功作用,遂查到这个问题,留作备忘查看 http://bbs.chinaunix.net/thread-2319120-1-1.html