android java socket实现邮件发送(smtp)
来源:互联网 发布:用c语言编写韩信点兵 编辑:程序博客网 时间:2024/05/17 01:35
最近做一个android项目要用到用户反馈的功能,就想出了这个笨方法,
通过邮件的方式来反馈,当然其过程对于用户来说是不可见的!
代码如下
package com.shyboy.mail;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.InetSocketAddress;import java.net.Socket;public class Mail { static OutputStream ou=null; static BufferedReader bff=null; static private final String NAME_BASE64="c2h5Ym95emhhbmdwZW5n\r\n";//用户名 base64 编码 ,注意是@前面的部分的base64编码 static private final String PASS_BASE64="********************\r\n";//密码base64编码 static private final String FROME="MAIL FROM: <shyboyzhangpeng@sina.com>\r\n";//用户名,注意格式 static private final String TO="RCPT TO: <123456789@qq.com>\r\n";//收件人,注意格式 static void sendMail(String subject,String content/*,String info*/) { try { Socket socket = new Socket(); String line = null; socket.connect(new InetSocketAddress("smtp.sina.com", 25), 3000);//连接服务器,这里用的是新浪邮箱 bff = new BufferedReader(new InputStreamReader(socket.getInputStream())); ou = socket.getOutputStream(); line=bff.readLine(); System.out.println("CONNECT:"+line); ou.write("HELO smtp.sina.com\r\n".getBytes("UTF-8"));//发送问候消息 line=bff.readLine(); System.out.println("HELO:"+line); ou.write("AUTH LOGIN\r\n".getBytes("UTF-8"));//发送登陆命令 line=bff.readLine(); System.out.println("AUTH LOGIN:"+line); ou.write(NAME_BASE64.getBytes("UTF-8"));//发送用户名的base64编码 line=bff.readLine(); System.out.println("NAME:"+line); ou.write(PASS_BASE64.getBytes("UTF-8"));//发送密码的base64编码 line=bff.readLine(); System.out.println("PASS:"+line); ou.write(FROME.getBytes("UTF-8"));//发送用户名,应定要和前面发送的编码一致 line=bff.readLine(); System.out.println("FROM:"+line); ou.write(TO.getBytes("UTF-8"));//发送收件人地址 line=bff.readLine(); System.out.println("TO:"+line); ou.write("DATA\r\n".getBytes("UTF-8"));//发送数据命令 line=bff.readLine(); System.out.println("DATA:"+line); ou.write(("From:shyboyzhangpeng@sina.com\r\n"//发件人,要和前面的一致 + "To:123456789@qq.com\r\n" //收件人,要和前面的一致 + "Subject:"+subject+"\r\n\r\n").getBytes("UTF-8"));//邮件主题 ou.write(("\r\t"+content).getBytes("UTF-8"));//邮件正文内容 ou.write("\r\n.\r\n".getBytes("UTF-8"));//结束标志 line=bff.readLine(); System.out.println("END:"+line); ou.write("QUIT\r\n".getBytes("UTF-8"));//退出登录 line=bff.readLine(); System.out.println("QUIT:"+line); ou.close(); // 关闭Socket输出流 bff.close(); // 关闭Socket输入流 socket.close(); // 关闭Socket } catch (Exception e){ System.out.println("Error. " + e); } } //测试发送程序 public static void main(String[] args) { sendMail("这里写主题","这里写内容"); }}
运行结果如下:
CONNECT:220 smtp-2-33.smtpsmail.fmail.yf.sinanode.com ESMTPHELO:250 smtp-2-33.smtpsmail.fmail.yf.sinanode.comAUTH LOGIN:334 VXNlcm5hbWU6NAME:334 UGFzc3dvcmQ6PASS:235 OK AuthenticatedFROM:250 okTO:250 okDATA:354 End data with <CR><LF>.<CR><LF>END:250 ok queue id 2792013015358QUIT:221 smtp-2-33.smtpsmail.fmail.yf.sinanode.com
目前新浪邮箱测试成功,其他邮箱同学们自行测试,注意所用的邮箱一定要开启smtp服务!
仅供个人学习研究参考,严禁用于非法用途!
附录:SMTP相应代码
SMTP常用的响应
501——参数格式错误
502——命令不可实现
503——错误的命令序列
504——命令参数不可实现
211——系统状态或系统帮助响应
214——帮助信息
220——服务器就绪
221——服务关闭
421——服务器未就绪,关闭传输信道
250——要求的邮件操作完成
251——用户非本地,将转发向
450——要求的邮件操作未完成,邮箱不可用
550——要求的邮件操作未完成,邮箱不可用
451——放弃要求的操作,处理过程中出错
551——用户非本地,请尝试
452——系统存储不足,要求的操作未执行
552——过量的存储分配,要求的操作未执行
553——邮箱名不可用,要求的操作未执行
354——开始邮件输入,以“.”结束
554——操作失败
0 0
- android java socket实现邮件发送(smtp)
- 再谈用java实现Smtp发送邮件之Socket编程
- Socket实现的SMTP邮件发送客户端。
- Java SMTP发送邮件
- java smtp发送邮件
- java socket 实现邮件发送
- java发送邮件(javaMail通过SMTP发送邮件)
- JAVA-SMTP发送邮件
- 利用Socket 编写SMTP 发送邮件程序
- socket 发送邮件的SMTP指令
- php通过socket,以SMTP发送邮件
- SMTP协议应用:使用Socket发送邮件
- 【Java】纯底层SMTP实现邮件发送核心源码
- java实现基于SMTP发送邮件的方法
- Java调用阿里SMTP服务器实现邮件发送
- Java实现基于SMTP发送邮件的工具类
- 通过java socket编程使用smtp简单邮件协议发送邮件
- android通过socket实现发送邮件
- C/C++编程规范
- HDU1425 <sort 快排>
- 汇编冒泡排序
- 读数序列: 1,11,21,1211,111221,312211
- U3D DrawCall优化手记
- android java socket实现邮件发送(smtp)
- 词袋模型BoW图像检索Python实战
- 背包问题(贪心法)
- Mybatis最入门---数据库的下载与安装
- 面向对象编程的基本原则
- HDU-3732 Ahui Writes Word
- LCS最长公共子序列
- JDK自带工具一览表
- (水)POJ-1416 DFS技巧