zoukankan      html  css  js  c++  java
  • Java发送QQ邮件

    面试的时候被问到这个问题,别人问我用Java发过邮件没有,被问得一脸懵逼。然后就研究了一下,不是很难,按照网上的方法折腾了几天就搞出来了。

    首先,使用QQ邮箱发送邮件之前需要在邮箱里面配置,开启pop3和smtp服务,其实这就是两个网络协议,一个是接受邮件的协议,一个是发送邮件的协议;

    POP3

    是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

    SMTP

    SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。 

    登录网页版的邮箱,在设置-》账户中可开启这两项服务。需要用手机验证一下,然后要保存生成的授权码,这个授权码在代码中或者在第三方邮件管理软件要使用的。

    然后就是所需要的jar包资源了,如果使用纯Java代码发送邮件则只需要两个jar包,这里有资源   http://www.runoob.com/java/java-sending-email.html

    activation.jar

    mail.jar

    之后就可以使用代码发送邮件了,以下的代码介绍了发送简单的文本文件和html格式的邮件。

    package qqmail.test;
    
    import java.util.Date;
    import java.util.Properties;
    import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    /**
     * 发送QQ邮件
     * 
     * @author YaoQi
     * @date 2017年7月13日
     */
    public class TestMail {
    
        public static void main(String[] args) {
    
            String from = "34845***@qq.com"; //发件人的邮箱地址
            String to = "16841***@qq.com";    //收件人的邮箱地址
            String subject = "mailTest";    //邮件主题
            String body = "邮件正文";    //邮件内容
    
            //设置发送邮件的一些属性
            Properties prop = new Properties();
            prop.setProperty("mail.transport.protocol", "smtp");
            prop.setProperty("mail.smtp.host", "smtp.qq.com");
            prop.setProperty("mail.smtp.port", "465");
            prop.setProperty("mail.smtp.auth", "true");
            prop.setProperty("mail.debug", "true");
            prop.setProperty("mail.smtp.ssl.enable", "true"); //qq邮箱必须设置这一项,ssl加密选项
    
            
            Session session = Session.getDefaultInstance(prop, new Authenticator() {
                public PasswordAuthentication getPasswordAuthentication() {
                    //这里需要验证邮箱的授权码,QQ邮箱需要授权码
                    return new PasswordAuthentication(from, "rvrvrjloadxm****");
                }
            });
            
            MimeMessage message = new MimeMessage(session);
            try {
                Transport transport = session.getTransport();
                message.setFrom(new InternetAddress(from));
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
                message.setSentDate(new Date());
                message.setSubject(subject);
                //如果仅仅是发送文本,使用setText()方法
                message.setText(body);
                
                //如果是发送html格式的邮件则需要使用setContent()方法,并且设置参数text/html; 这两个方法是等价的,后面执行的会覆盖前一个方法设置的内容
                message.setContent("<h1>This is HTML message</h1>","text/html" );
                message.saveChanges();
                session.setDebug(true);
                transport.connect(from, "rvrvrjloadxm****");
                transport.sendMessage(message, message.getAllRecipients());
                transport.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    如果要发送带附件的邮件,则需要添加多重消息,其余部分都一样,最后把消息组合成一个邮件。

    try {
                Transport transport = session.getTransport();
                message.setFrom(new InternetAddress(from));
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
                message.setSentDate(new Date());
                message.setSubject(subject);
    
                // 创建消息体部分
                BodyPart messageBodyPart = new MimeBodyPart();
                messageBodyPart.setText("这是邮件正文");
    
                // 创建多重消息
                Multipart multipart = new MimeMultipart();
                multipart.addBodyPart(messageBodyPart); // 将消息体部分加入到多重消息中
    
                // 创建一个附件
                messageBodyPart = new MimeBodyPart();
                File file = new File("D:\java\workSpace\SendMailDemo\file.txt");
                DataSource source = new FileDataSource(file);
                messageBodyPart.setDataHandler(new DataHandler(source));
                messageBodyPart.setFileName("file");
                multipart.addBodyPart(messageBodyPart);
    
                message.setContent(multipart);
                message.saveChanges();
                session.setDebug(true);
                transport.connect(from, "rvrvrjloadxm****");
                transport.sendMessage(message, message.getAllRecipients());
                transport.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
  • 相关阅读:
    一个简易的词法分析器
    Wireshark的简单使用
    TCP的三次握手和四次挥手详解
    在WEB显示实时视频流
    linux 下 查看进程的启动时间和运行时间
    mac os x 安装adb
    C++ 和 java 使用 AES CBC 128 加解密
    转:Java中String与byte[]的转换
    对称加密
    Google C++ Style Guide在C++11普及后的变化
  • 原文地址:https://www.cnblogs.com/hello-daocaoren/p/7197500.html
Copyright © 2011-2022 走看看