自己动手写邮件客户端(1)
    ——命令行测试发邮件

参考

RFC中文

环境

  • 系统: win10
  • 语言: java

简要流程

  • 建立一个到邮件服务器的连接(在此使用smtp.163.com:25)

    Socket s = new Socket(mailServer,25);
    
  • 将SOCKET输入流连接到带缓冲功能的输入流BufferedReader,以便一次读一行来自服务器的应答报文

    BufferedReader inFromServer = new BufferedReader(new InputStreamReader(s.getInputStream()));
    
  • 将SOCKET输出流连接到带缓冲功能的输出流PrintWriter,以便一次输出一行报文到服务器

    PrintWriter outToServer = new PrintWriter(s.getOutputStream() ,true);
    
  • 读取来自服务器的第一行应答,并显示在屏幕上

    response = inFromServer.readLine();
    System.out.print("MailServer:" + response + "\n");
    
  • 将用户的帐号和密码以BASE64格式进行编码以便进行服务器身份验证

    BASE64Encoder encoder = new  BASE64Encoder();
    String encodedUser = encoder.encode(from.getBytes());
    String encodedPwd = encoder.encode(pw.getBytes());
    
  • 和服务器会话,发送EHLO hostname命令

    outToServer.println("EHLO " + hostName);
    
  • 读入来自服务器的5行应答
  • 和服务器会话,发送AUTH LOGIN命令,请求身份验证

    outToServer.println("AUTH LOGIN ");
    
  • 读入来自服务器的应答,并显示在屏幕上

  • 向服务器发送自己的帐号
    outToServer.println(encodedUser);

  • 读入来自服务器的应答,并显示在屏幕上

  • 向服务器发送自己的密码
  • 读入来自服务器的应答,并显示在屏幕上
  • 向服务器发送MAIL FROM: 发件人地址

    outToServer.println("MAIL FROM: <" + from + ">");
    
  • 读入来自服务器的应答,并显示在屏幕上

  • 向服务器发送RCPT TO: 收件人地址

    outToServer.println("RCPT TO: <" + to + ">");
    
  • 读入来自服务器的应答,并显示在屏幕上
  • 请求发送邮件正文

    outToServer.println("DATA");
    
  • 读入来自服务器的应答,并显示在屏幕上
  • 开始发送邮件正文
  • 发送邮件结束标志

    outToServer.println(".");
    
    • 读入来自服务器的应答,并显示在屏幕上
  • 关闭SOCKET

    s.close();
    

遇到的问题及解决方案

1

注释使用中文,编译不通过。
解决:javac -help 发现 -encoding选项,故编译时加-encoding utf-8

2

java后的文件不能跟.class后缀

3

当传入发送邮箱正确的用户名和密码时,总是收到到:550 User has no permission这样的错误,

其实我们用Java发送邮件时相当于自定义客户端根据用户名和密码进行登录,然后使用SMTP服务发送邮件。但新注册的163邮件默认是不开启客户端授权验证的(对自定的邮箱大师客户端默认开启),

因此登录总是会被拒绝,验证没有权限。解决办法是进入163邮箱,进入邮箱中心——客户端授权密码,选择开启即可

设置完毕后,在代码中用使用客户端授权密码代替原始的邮箱密码,这样就可以正确的发送邮件了。

4

发送DATA后返回250而不是354
解决:读入服务器信息顺序不对,不知道为什么就响应不正确了,改了之后该什么时候读一行信息就读一行信息,然后就正确回应354了。

5

发送信息后服务器返回554 DT:SPM
这是因为邮件主题(subject)设置成了test,被网易当成垃圾邮件,没有发出去。。。。。。。。。参见

自己给自己(163)发不会出现这种问题,但是邮件没有内容
解决:正文与头(subject、from、to等信息空一行),网上有人说要

writter.println("Content-Type: text/plain;charset=\"gb2312\"");//如果发送正文必须加这个,而且下面要有一个空行
05.writter.println();

[其博文链接](http://blog.csdn.net/icodeyou/article/details/40324451)
试了一下,不加这个,直接空行就可以了。

自己动手写邮件客户端(1)相关推荐

  1. 使用java语言基于SMTP协议手写邮件客户端

    使用java语言基于SMTP协议手写邮件客户端 1. 说明 电子邮件是互联网上常见的应用,他是互联网早期的产品,直至今日依然受到广大用户的喜爱(在中国可能因为文化背景不同,电子邮件只在办公的时候常用) ...

  2. 太实用了!自己动手写软件——邮件用户名密码验证

    我们计划实现的弱口令破解软件一共支持如下四类协议的解析: 数据库类--MySQL.Oracle和SQL server 邮件类--IMAP.POP3和SMTP 文件传输类--FTP 运维类--SSH 数 ...

  3. 自己动手写H3C校园网登录客户端(Linux平台版)

    自己动手写H3C校园网登录客户端(Linux平台版) By 马冬亮(凝霜  Loki) 一个人的战争(http://blog.csdn.net/MDL13412) 周一晚上的时候,和实验室的ZL同学提 ...

  4. SSO单点登录教程(四)自己动手写SSO单点登录服务端和客户端

    作者:蓝雄威,叩丁狼教育高级讲师.原创文章,转载请注明出处. 一.前言 我们自己动手写单点登录的服务端目的是为了加深对单点登录的理解.如果你们公司想实现单点登录/单点注销功能,推荐使用开源的单点登录框 ...

  5. foxmail客户端,写邮件窗口弹不出来

    昨天项目上线后,要发测试报告,foxmail客户端点击写邮件,就是不能弹出来,只好做罢. 今天来了百度一下才解决了. 解决方法:  点击写邮件后,打开任务管理器ctrl+shift+del,找到写邮件 ...

  6. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...

    自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...

  7. 深入学习Tomcat----自己动手写服务器(附服务器源码)

    相信大多Web开发者对Tomcat是非常熟悉的,众所周知Tomcat是一款非常好用的开源Servlet容器,您一定对这个最流行的Servlet容器充满好奇,虽然它并不像一个黑盒子那样让人无法触摸但是T ...

  8. .sql文件_自己动手写SQL查询引擎

    自己动手写SQL查询引擎 起因 笔者在实际工作中经常需要解析文件,每次文件稍有变化,都得拷贝粘贴一堆代码. 于是就想着能不能做一个通用的服务,通过配置的方式解析文件. 配置通用 最通用的方法就是自己定 ...

  9. polycom安卓手机客户端_Spark,安卓上最好用的邮件客户端来了!附App下载

    在QQ.微信.钉钉这些即时通信软件的围剿下,才诞生20年不到的电子邮箱俨然已经像上个世纪的产物了.现在还在用Email的大部分是工作需要,私人的话顶多就是收收网站验证码激活邮件之类的.因此大多数人在手 ...

最新文章

  1. 百度正在加速小程序的开放趋势
  2. 你学废了 Mybatis 动态批量修改吗?
  3. 【HTML5CSS3进阶学习02】Header的实现·CSS中的布局
  4. 后端技术:Mybatis是如何解析配置文件的?
  5. R语言第八讲 评估模型之交叉验证法分析案例
  6. Idea创建包以及导入jar包等操作
  7. Unity3D数字孪生笔记——Unity脚本篇
  8. 天涯明月刀最新服务器,天涯明月刀最新开服时间表 | 手游网游页游攻略大全
  9. 关于键盘(总论8042)
  10. operator int()用法
  11. 计算机word画铁路,在word中画铁路线.docx
  12. 关于Scrapy爬虫框架中meta参数的使用示例演示(下)
  13. 用K-means聚类分类不同行业的关税模型
  14. 回归分析中的p值和R方哪个更重要?
  15. Verilog基础知识
  16. JAVA PrinterJob 指定打印机
  17. 单目ORB-SLAM流程梳理
  18. 单选按钮属性:value、name、checked
  19. web 微信与基于node的微信机器人实现
  20. Webots串级机械臂建模仿真过程-详细!

热门文章

  1. 饥荒联机版:如何才能养多个宠物
  2. 技.艺.道:phoenix数据的导入与导出
  3. ATTCK v12版本战术介绍——提权(一)
  4. 2020 PHP安全指南
  5. android 盒子录屏apk,三种用于安卓录屏的解决方案
  6. Python 一键制作微信好友图片墙
  7. KDD 2022 | 生命科学中的图神经网络:机遇和解决方案
  8. python 大智慧 dll 下单_大智慧闪电下单
  9. 一维等离子体仿真学习
  10. 瓦刀发布,必属精品:Domino评审、表决系统