javamail 发送邮件

import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.apache.log4j.Logger;

/**
 * 
 * @author liyonge
 * 自动发送邮件
 * 调用javamail,实现邮件收发人的配置,并发送邮件
 * 对QQ和163邮箱使用,首先把邮箱的POP3/SMTP服务,IMAP/SMTP服务打开 首先确定你的网络正常、非代理 
 * 如果没有开启,那么这样设置下 设置->账户 ,把这个选上 [√]SMTP发信后保存到服务器 
 *
 */

public class SendEmailListener {
    
    public static Logger logger = Logger.getLogger(SendEmailListener.class.getName());
    
    /**
     * 邮件收发人的配置,并发送邮件
     */
    public static void sendEmail() {
        String host="";//邮箱服务器
        String sendUser="";//发件人登录用户名
        String sendPassWord="";//发件人登录密码
        String toUser="";//收件人邮箱账号
        
        try {    
            Properties props = new Properties();                // 用于连接邮件服务器的参数配置(发送邮件时才需要用到)
            //创建参数配置, 用于连接邮件服务器的参数配置            
            props.setProperty("mail.debug", "true");    // 开启debug调试        
            props.setProperty("mail.smtp.auth", "true");    // 发送服务器需要身份验证                
            props.setProperty("mail.host", host);        // 设置邮件服务器主机名                
            props.setProperty("mail.transport.protocol", "smtp");    // 发送邮件协议名称

            /*
             * PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
             * 如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,
             * 打开下面的注释代码, 开启 SSL 安全连接。
             * SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
             * 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
             * QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
             *
            String smtpPort = "465";
            props.setProperty("mail.smtp.port", smtpPort);//端口号
            props.setProperty("mail.smtp.ssl.enable", "true");//加认证机制*/

            // 设置环境信息        
            Session session= Session.getInstance(props);        // 根据参数配置,创建会话对象(为了发送邮件准备的)
            //session.setDebug(true); //开启debug调试    
            Message msg = new MimeMessage(session);     // 创建邮件对象

            /*
             * 也可以根据已有的eml邮件文件创建 MimeMessage 对象
             * MimeMessage message = new MimeMessage(session, new FileInputStream("MyEmail.eml"));
             */
            // 设置邮件内容                
            msg.setSubject(emailSubject());        //设置邮件标题
            // 设置邮件内容        
            msg.setText(emailContent());        
            //msg.setContent("这是一封由JavaMail发送的邮件!","text/html;charset=GBK");
            msg.setSentDate(new Date());// 设置发送时间  
            // 设置发件人        
            msg.setFrom(new InternetAddress(sendUser));    
            msg.setRecipient(Message.RecipientType.TO, new InternetAddress(toUser));// 设置收件人地址
            msg.saveChanges();//保存设置
            Transport transport = session.getTransport("smtp");        
            // 连接邮件服务器        
            transport.connect(host,sendUser,sendPassWord);        
            //transport.sendMessage(msg, new Address[] {new InternetAddress(toUser)});    
            transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));// 发送邮件                      
            transport.close();// 关闭连接
        }/*catch(Exception e) {
            System.out.println(e.getMessage());
        }*/
        catch (MessagingException e) {
            logger.error("邮件发送失败",e);
            throw new RuntimeException(e);
            
        }
    }
    

    /**
     * 获取邮件的标题
     * @return
     */
    public static String emailSubject() {
        String subject="auto email";
        
        return subject;
        
    }
    
    /**
     * 获取邮件的内容
     * @return
     */
    public static String emailContent() {
        String content="Hello,this is a auto test rusult email";
        
        return content;
        
    }
    
    public static void main(String[] args)  {
        sendEmail();

    }
    

}

 

如果报错,根据报错信息找问题

javamail 发送邮件_第1张图片

这个企业邮件的拦截问题,可查看链接查找原因,这里的原因是被视为垃圾邮件

QQ邮箱登录的时候,connect的密码不是用户密码,是授权码

javamail 发送邮件_第2张图片

你可能感兴趣的:(测试开发)