zoukankan      html  css  js  c++  java
  • 发送邮件功能

    使用SMTP协议,163服务器开启SMTP。值得注意的是登录密码是授权密码。

    可以创建一个邮箱模板表,内容设置为$$形式的如(尊敬的$username$,您好!您于$time$发出的注册申请已通过。),可以动态的设置信息

    package com.wjz.util;
    
    import java.util.Date;
    import java.util.Map;
    import java.util.Properties;
    
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class EmailUtil {
    
        private EmailUtil() {
            init();
        }
    
        private static final Logger logger = LoggerFactory.getLogger(EmailUtil.class);
    
        private static final EmailUtil emailUtil = new EmailUtil();
    
        public static EmailUtil getInstance() {
            return emailUtil;
        }
    
        private String account;
        private String password;
        private String host;
        private String subject;
        private String url;
        private String message;
    
        private void init() {
            account = "企业邮箱账号动态获取如从数据库";
            password = "企业邮箱密码动态获取如从数据库";
            host = "SMTP服务器地址动态获取如从数据库";
            subject = "邮件主题动态获取如从数据库";
        }
    
        public void send() {
            Properties properties = new Properties();
            properties.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
            properties.put("mail.smtp.host", host);
            properties.put("mail.smtp.auth", "true"); // 需要请求认证
    
            Session session = Session.getDefaultInstance(properties);
            session.setDebug(false); // 可开启debug模式
            try {
                MimeMessage message = createMimeMessage(session, account, url);
                // 根据 Session 获取邮件传输对象
                Transport transport = session.getTransport();
                // 使用 邮箱账号 和 密码(授权密码) 连接邮件服务器
                transport.connect(account, password);
                // 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
                logger.info(account + "发送邮箱到" + url);
                transport.sendMessage(message, message.getAllRecipients());
                // 关闭连接
                transport.close();
            } catch (Exception e) {
                // 
            }
        }
    
        public MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
            // 1. 创建一封邮件
            MimeMessage message = new MimeMessage(session);
            // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称)
            message.setFrom(new InternetAddress(sendMail, "xxx", "UTF-8"));
            // 3. To: 收件人(可以增加多个收件人、抄送、密送)
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail));
            // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)
            message.setSubject("送给xx的", "UTF-8");
            // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容)
            message.setContent("xxx俺稀罕你!", "text/html;charset=UTF-8");
            // 6. 设置发件时间
            message.setSentDate(new Date());
            // 7. 保存设置
            message.saveChanges();
            return message;
        }
    
        public void replace(Map<String, String> map) {
            String $userName$ = "用户名称";
            String $time$ = "时间";
            String body = this.getMessage();
            body.replace("$userName$", $userName$).replace("$time$", $time$);
            this.setMessage(body);
        }
    
        public String getAccount() {
            return account;
        }
    
        public void setAccount(String account) {
            this.account = account;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getHost() {
            return host;
        }
    
        public void setHost(String host) {
            this.host = host;
        }
    
        public String getSubject() {
            return subject;
        }
    
        public void setSubject(String subject) {
            this.subject = subject;
        }
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public static void main(String[] args) {
            EmailUtil emailUtil = EmailUtil.getInstance();
            emailUtil.setAccount("170xxxx7797@163.com");
            emailUtil.setPassword("xxx");
            emailUtil.setHost("smtp.163.com");
            emailUtil.setUrl("177xxxx296@qq.com");
            emailUtil.setSubject("测试");
            emailUtil.setMessage("俺稀罕你!");
            emailUtil.send();
        }
    }
  • 相关阅读:
    SqlServer Alwayson 搭建排错记录(一)
    SqlServer图形数据库初体验
    SqlServer报错:主体“dbo”不存在
    IIS重叠回收
    No module named 'revoscalepy'问题解决
    SqlServer查询文件组被占用情况
    SqlServer作业指定目标服务器
    [持续更新]UnsatisfiedLinkError常见问题及解决方案
    Android加载SO库UnsatisfiedLinkError错误的原因及解决方案
    _set_invalid_parameter_handler异常处理函数
  • 原文地址:https://www.cnblogs.com/BINGJJFLY/p/7484860.html
Copyright © 2011-2022 走看看