JAVA实现SMTP邮件发送

该博客偏于实战,以代码为主。不过笔者加了许多注释,方便阅读。

好了说说该博客内容。该博客主要是JAVA实现SMTP发送邮件,主要做到以下几点

1、打开talent客户端
2、掌握在cmd下邮件的发送
3、发送者邮箱开启客户端授权码
4、掌握Base64编码
5、当然还有你会敲代码的双手^_^

一、掌握在cmd下实现邮件发送

1、首先你的开启Telnet客户端(控制面板/程序/打开或关闭windows功能/选择Telnet客户端)
  • 这个可能会遇到一系列问题,百度都有许多解决办法

这里写图片描述

2、掌握cmd下邮件发送过程
telnet smtp.163.com 25
220
helo myxulinjie
250 ok
auth login
334 dXNlcm5hbWU6
***(这里输入发送者邮箱的Base64码)
334 UGFzc3dvcmQ6
***(这里输入发送者授权码的密码,注意不是邮箱密码)
235 Authentication successful
mail from: <发送者邮箱@163.com>
250 Mail Ok
rcpt to: <接收者邮箱@163.com>
250 Mail Ok
data
354 End data with <CR><LF>.<CR><LF>
to: 接收者邮箱@163.com
from: 发送者邮箱@163.com
subject:test telnet smtp mail
what is your name?
.
250 Mail OK.........
rset
250 OK
quit
221 Bye

二、发送者邮箱开启客户端授权码

这里以163为例

这里写图片描述


三、JAVA实现SMTP发送邮件

基于CC的Base64编解码工具类

package Base64Demo;

import org.apache.commons.codec.binary.Base64;
/*
 *基于commons-codec-1.11 
 */

public class Base64Utile_cc {
    /*
     *加密过程 
     */
    public static String EncodeBase64(byte[] data)
    {
        Base64 en=new Base64();
        String str=en.encodeBase64String(data);
        return str;
    }

    /*
     *解密过程 
     */
    public static String DecodeBase64(String str) {
        Base64 de=new Base64();
        byte[] ResultBase=de.decodeBase64(str);
        String str2=new String(ResultBase);
        return str2;
    }


}

实现SMTP发送邮件类

package Base64Demo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class SMTPDEMO {

    public static void main(String[] args) {
        /*
         *用户名和密码 
         */
        String SendUser="ash_ali@163.com";
        String SendPassword="xlj932834897";
        String ReceiveUser="ash_ali01@163.com";

        /*
         *对用户名和密码进行Base64编码 
         */
        String UserBase64=Base64Utile_cc.EncodeBase64(SendUser.getBytes());
        String PasswordBase64=Base64Utile_cc.EncodeBase64(SendPassword.getBytes());

        try {
            /*
             *远程连接smtp.163.com服务器的25号端口
             *并定义输入流和输出流(输入流读取服务器返回的信息、输出流向服务器发送相应的信息) 
             */
            Socket socket=new Socket("smtp.163.com", 25);
            InputStream inputStream=socket.getInputStream();//读取服务器返回信息的流
            InputStreamReader isr=new InputStreamReader(inputStream);//字节解码为字符
            BufferedReader br=new BufferedReader(isr);//字符缓冲

            OutputStream outputStream=socket.getOutputStream();//向服务器发送相应信息
            PrintWriter pw=new PrintWriter(outputStream, true);//true代表自带flush
            System.out.println(br.readLine());

            /*
             *向服务器发送信息以及返回其相应结果 
             */

            //helo
            pw.println("helo myxulinjie");
            System.out.println(br.readLine());

            //auth login
            pw.println("auth login");
            System.out.println(br.readLine());
            pw.println(UserBase64);
            System.out.println(br.readLine());
            pw.println(PasswordBase64);
            System.out.println(br.readLine());

            //Set "mail from" and  "rect to"
            pw.println("mail from:<"+SendUser+">");
            System.out.println(br.readLine());
            pw.println("rcpt to:<"+ReceiveUser+">");
            System.out.println(br.readLine());

            //Set "data"
            pw.println("data");
            System.out.println(br.readLine());

            //正文主体(包括标题,发送方,接收方,内容,点)
            pw.println("subject:myxulinjie");
            pw.println("from:"+SendUser);
            pw.println("to:"+ReceiveUser);
            pw.println("Content-Type: text/plain;charset=\"gb2312\"");//设置编码格式可发送中文内容
            pw.println();
            pw.println("大家好,欢迎来到林杰的专栏");
            pw.println(".");
            pw.print("");
            System.out.println(br.readLine());

            /*
             *发送完毕,中断与服务器连接 
             */
            pw.println("rset");
            System.out.println(br.readLine());
            pw.println("quit");
            System.out.println(br.readLine());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

这里写图片描述

成功收到邮件。该实现也是基于了解Base64编码基础上,如果对Base64不是很熟悉的小伙伴可以转战以下这篇博客了解以下哦
http://blog.csdn.net/w_linux/article/details/79307024

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值