你的位置:首页 > Java教程

[Java教程]通过Java代码发送邮件1(58)


邮件协议:

  发邮件的:SMTP (Simple Mail Transport  Protocal)

  收邮件的协议:pop3 (Post Office Protocal 3)

  IMAP 新协议 发邮件也可以收邮件。

(一步步的与服务器交互)

SMTP :

Ehlo<空格><你的域名><回车>

   Ehlo  - 与服务器

Auth<SP>Login<CRLF>

 请求登录

Mail<SP>From:<reverse-path><CRLF>

  发件人的email:www@aa.com

Rcpt<SP>To:<forword-path><CRLF>

  收件的地址:eee@aa.com

Data<CRLF>

  以下是数据

Quit<CRLF>

   退出

收发邮件的过程:

    一般情况下,smtp和pop3是两个服务器(主机)。

   Smtp邮件的端口为25。

POP3 端口为110。

发邮件示例

1 安装foxmail:

2 发邮件时,要对用户名和密码进行base64编码

    //对用户名和密码进行base64编码

    @Test

    public void base64(){

       String name = "wj_leaf12345";

       String pwd = "1qaz2wsx";

       BASE64Encoder en = new BASE64Encoder();

       name = en.encode(name.getBytes());

       pwd = en.encode(pwd.getBytes());

       System.err.println(name);

       System.err.println(pwd);

    }

3 通过java代码发邮件

      用java发邮件,必须要导入新的包

       mail.jar – 发邮件的核心包

       activation.jar – 对用户和密码加密.

       在mail.jar中有三个核心类:

       Javax.mail.Session – 是指与邮件服务器会话。整个项目中只要一个就可以了.

       Javax.mail.Message(接口)  - 准备发送数据信息。

                      MimeMessage - 可以设置类型的数据信息。

       Transport – 它拥有一个方法可以发送Message。

第一步;导入两个jar包

第二步;发简单的邮件

public void sendMail() throws Exception{

       //第一步:声明properties对象放信息

       Properties prop = new Properties();

       //设置连接哪一台服务器

       prop.setProperty("mail.host","smtp.126.com");

       //设置是否验证

       prop.setProperty("mail.smtp.auth", "true");

       //第二步:声明用户名和密码

       Authenticator auth = new Authenticator() {

           //此访求返回用户和密码的对象

           public PasswordAuthentication getPasswordAuthentication() {

              PasswordAuthentication pa =

                     new PasswordAuthentication("aaa", "sss");

              return pa;

           }

       };

       ////第二步:获取Session对象

       Session session =

              Session.getDefaultInstance(prop,auth);

       //设置session的调试模式

       session.setDebug(true);

       //第三步:声明信息

       MimeMessage mm1 =

              new MimeMessage(session);

      

       //第四步:设置发件人email

       Address from = new InternetAddress("wj@126.com");

       mm1.setFrom(from);

       //第五步:设置收件人

       mm1.setRecipient(RecipientType.TO,new InternetAddress("wj@163.com"));

       mm1.setRecipient(RecipientType.CC, new InternetAddress("554@qq.com"));

       mm1.setRecipient(RecipientType.BCC, new InternetAddress("wj@ss.cn"));

       //第六步:设置主题

       mm1.setSubject("这是用Java发的邮件3");

       mm1.setContent("你好,这是用java发的邮件,3333再试一下", "text/plain;charset=UTF-8");

       //第七步:

       Transport.send(mm1);

    }

 

第三步:v发带有超连接的邮件

mm1.setSubject("这是用Java发的邮件sfasdf3");

       mm1.setContent("你好,这是用java发的邮件,<a href='http://www.baidu.com'>百度</a>", "text/html;charset=UTF-8" );

       //第七步:

       Transport.send(mm1);

第四步:符件的邮件

public void sendFile() throws Exception{

       Properties p = new Properties();

       p.setProperty("mail.host","smtp.163.com");

       p.setProperty("mail.smtp.auth","true");

       Session s = Session.getDefaultInstance(p,new Authenticator() {

           @Override

           public PasswordAuthentication getPasswordAuthentication() {

              return new PasswordAuthentication("ww", "123");

           }

       });

       s.setDebug(true);

 

       //声明MimeMessage

       MimeMessage msg = new MimeMessage(s);

       msg.setFrom(new InternetAddress("ww@163.com"));

       msg.setRecipient(RecipientType.TO, new InternetAddress("ww@126.com"));

       msg.setSubject("图片的");

      

       //第一步:声明多处理的Part

       MimeMultipart mm = new MimeMultipart();

       //第二步:声明

       MimeBodyPart body1 = new MimeBodyPart();

       //第三步:设置符件

       DataSource ds = new FileDataSource(new File("./img/a.jpg"));

       DataHandler dh = new DataHandler(ds);

       body1.setDataHandler(dh);

       //必须要设置名称

       body1.setFileName(MimeUtility.encodeText("美女.jpg"));

       MimeBodyPart body2 = new MimeBodyPart();

       //第三步:设置符件

       DataSource ds2 = new FileDataSource(new File("./img/b.jpg"));

       DataHandler dh2 = new DataHandler(ds2);

       body2.setDataHandler(dh2);

       //必须要设置名称

       body2.setFileName(MimeUtility.encodeText("美女2.jpg"));

       MimeBodyPart body3 = new MimeBodyPart();

       //第三步:设置符件

       DataSource ds3 = new FileDataSource(new File("./img/m.mp3"));

       DataHandler dh3 = new DataHandler(ds3);

       body3.setDataHandler(dh3);

       //必须要设置名称

       body3.setFileName(MimeUtility.encodeText("世纪末.mp3"));

       //将body1添加到mm

       mm.addBodyPart(body1);

       mm.addBodyPart(body2);

       mm.addBodyPart(body3);

       msg.setContent(mm);

      

       //发送

       Transport.send(msg);

    }