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();
            }
  • 相关阅读:
    nullnullConnecting with WiFi Direct 与WiFi直接连接
    nullnullUsing WiFi Direct for Service Discovery 直接使用WiFi服务发现
    nullnullSetting Up the Loader 设置装载机
    nullnullDefining and Launching the Query 定义和启动查询
    nullnullHandling the Results 处理结果
    装置输出喷泉装置(贪心问题)
    数据状态什么是事务?
    停止方法iOS CGD 任务开始与结束
    盘文件云存储——金山快盘
    函数标识符解决jQuery与其他库冲突的方法
  • 原文地址:https://www.cnblogs.com/hello-daocaoren/p/7197500.html
Copyright © 2011-2022 走看看