zoukankan      html  css  js  c++  java
  • Java实现发邮件功能

    代码如下:

    package com.weimob.finance.utils;
    import java.io.UnsupportedEncodingException;
    import java.util.Date;
    import java.util.List;
    import java.util.Properties;

    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Multipart;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    import javax.mail.internet.MimeUtility;

    /**
     * Java Mail 工具类
     *  
     * @author XueQi
     * @version 1.0
     *  
     */  
    public class MailUtils {  
        private static String host;  
        private static String username;  
        private static String password;  
        private static String from;  
        private static String nick;  
     
        static {  
            try {  
                // Test Data  
                host = "smtp.qq.com";  
                username = "yourqq@qq.com";  
                password = "*******";  
                from = "yourqq@qq.com";  
                nick = "nickinfo";  
                // nick + from 组成邮箱的发件人信息  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
     
        /**
         * 发送邮件
         *  
         * @param to
         *            收件人列表,以","分割
         * @param subject
         *            标题
         * @param body
         *            内容
         * @param filepath
         *            附件列表,无附件传递null
         * @return
         * @throws MessagingException
         * @throws AddressException
         * @throws UnsupportedEncodingException
         */  
        public static boolean sendMail(String to, String subject, String body,  
                List<String> filepath) throws AddressException, MessagingException,  
                UnsupportedEncodingException {  
            // 参数修饰  
            if (body == null) {  
                body = "";  
            }  
            if (subject == null) {  
                subject = "无主题";  
            }  
            // 创建Properties对象  
            Properties props = System.getProperties();  
            // 创建信件服务器  
            props.put("mail.smtp.host", host);  
            props.put("mail.smtp.auth", "true"); // 通过验证  
            props.put("mail.smtp.port", "465");
            props.put("mail.transport.protocol", "smtp");
            props.put("mail.smtp.ssl.enable", "true");
           //props.put("mail.debug", "true");
            // 得到默认的对话对象  
            Session session = Session.getDefaultInstance(props, null);  
            // 创建一个消息,并初始化该消息的各项元素  
            MimeMessage msg = new MimeMessage(session);  
            nick = MimeUtility.encodeText(nick);  
            msg.setFrom(new InternetAddress(nick + "<" + from + ">"));  
            // 创建收件人列表  
            if (to != null && to.trim().length() > 0) {  
                String[] arr = to.split(",");  
                int receiverCount = arr.length;  
                if (receiverCount > 0) {  
                    InternetAddress[] address = new InternetAddress[receiverCount];  
                    for (int i = 0; i < receiverCount; i++) {  
                        address[i] = new InternetAddress(arr[i]);  
                    }  
                    msg.addRecipients(Message.RecipientType.TO, address);  
                    msg.setSubject(subject);  
                    // 后面的BodyPart将加入到此处创建的Multipart中  
                    Multipart mp = new MimeMultipart();  
                    // 附件操作  
                    if (filepath != null && filepath.size() > 0) {  
                        for (String filename : filepath) {  
                            MimeBodyPart mbp = new MimeBodyPart();  
                            // 得到数据源  
                            FileDataSource fds = new FileDataSource(filename);  
                            // 得到附件本身并至入BodyPart  
                            mbp.setDataHandler(new DataHandler(fds));  
                            // 得到文件名同样至入BodyPart  
                            mbp.setFileName(fds.getName());  
                            mp.addBodyPart(mbp);  
                        }  
                        MimeBodyPart mbp = new MimeBodyPart();  
                        mbp.setText(body);  
                        mp.addBodyPart(mbp);  
                        // 移走集合中的所有元素  
                        filepath.clear();  
                        // Multipart加入到信件  
                        msg.setContent(mp);  
                    } else {  
                        // 设置邮件正文  
                        msg.setText(body);  
                    }  
                    // 设置信件头的发送日期  
                    msg.setSentDate(new Date());  
                    msg.saveChanges();  
                    // 发送信件  
                    Transport transport = session.getTransport("smtp");  
                    transport.connect(username, password);
                    transport.sendMessage(msg,  
                            msg.getRecipients(Message.RecipientType.TO));  
                    transport.close();  
                    return true;  
                } else {  
                    System.out.println("None receiver!");  
                    return false;  
                }  
            } else {  
                System.out.println("None receiver!");  
                return false;  
            }  
        }  
     
        public static void main(String[] args) throws AddressException,  
                UnsupportedEncodingException, MessagingException {  
            sendMail("toother@qq.com,yourqq@qq.com", "注册信息邮件", "注册邮件,有附件", null);
            System.out.println("sendMail success!");
        }  
    }

    准备过程:

    1.QQ邮箱两个

    2.发送邮件的jar包

    mail.jar

    <dependency>
                <groupId>javax.mail</groupId>
                <artifactId>mail</artifactId>
                <version>1.5.0-b01</version>

    </dependency>

    3.用QQ给QQ发送邮件,发送方得开启第三方登录,也就是授权登录,下面就是获取授权码解释链接

    需要开始POP3和SMTP,还有点击生成授权码

    4.java代码(上面已附)

    5运行,最后显示 250 Mail OK即发送成功

    中间可能遇到的问题:

    1.邮箱,帐号,密码配置不正确导致报connection failed error!

    2.邮箱没有开启smpt协议。如上面步骤3操作

    3.报 java.io.FileNotFoundException: 

    原因是,eclipse 自带的mail jar包与maven导入的mail jar包冲突,删除掉j2ee中mail jar ,冲突即可解决!

  • 相关阅读:
    HDU6060 RXD and dividing
    Knapsack in a Globalized World --多重完全背包
    hdu 6058 Kanade's sum
    矩形面积 HDU
    Bridge Across Islands POJ
    Manors HDU
    Harry Potter and J.K.Rowling HDU
    Polygons HDU
    Jungle Outpost HDU
    CRB and Farm HDU
  • 原文地址:https://www.cnblogs.com/jiaguozhilian/p/5809815.html
Copyright © 2011-2022 走看看