Java-发送邮件(附件、图片)---(五)实例

1:下载加包 javax.mail-1.4.5.jar
2:JAVA邮件发送的大致过程是这样的的:

1、构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法。此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利。

2、构建一个properties文件,该文件中存放SMTP服务器地址等参数。

3、通过构建的properties文件和javax.mail.Authenticator具体类来创建一个javax.mail.Session。Session的创建,就相当于登录邮箱一样。剩下的自然就是新建邮件。

4、构建邮件内容,一般是javax.mail.internet.MimeMessage对象,并指定发送人,收信人,主题,内容等等。

5、使用javax.mail.Transport工具类发送邮件。
代码如下:
1:首先是继承自javax.mail.Authenticator的一个具体类。getPasswordAuthentication()方法也就是构建一个PasswordAuthentication对象并返回。
MySendMailAuthenticator .java

import javax.mail.Authenticator;
 import javax.mail.PasswordAuthentication;

 class MySendMailAuthenticator extends Authenticator
 {
  String username = "";
   String password = "";

   public MySendMailAuthenticator(String user, String pass) { this.username = user;
     this.password = pass; }

   protected PasswordAuthentication getPasswordAuthentication() {
     return new PasswordAuthentication(this.username, this.password);
  }
}

2:邮件发送类,剩下的步骤都是在这个类实现的。
SendMail .java

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

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

/**
 * 
 * @author javalzbin
 * 
 */
public class SendMail {

    private String smtp = ""; // 邮件服务器主机名
    private String protocol = ""; // 邮件传输协议
    private String username = ""; // 登录用户名
    private String password = ""; // 登录密码
    private String from = ""; // 发件人地址
    private String to = ""; // 收件人地址
    private String cc = "";
    private String subject = ""; // 邮件主题
    private String body = ""; // 邮件内容
    private String port = "587"; // 邮件内容

    // 一个有规则的map,用作嵌入图片
    Map<String, String> map;
    // 存放附件
    List<String> list;

    public SendMail(Map<String, String> map, List<String> filelist,
            Map<String, String> image) {
        this.smtp = map.get("smtp");
        this.protocol = map.get("protocol");
        this.username = map.get("username");
        this.password = map.get("password");
        this.from = map.get("from");
        this.to = map.get("to");
        this.cc = map.get("cc");
        this.subject = map.get("subject");
        this.body = map.get("body");
        this.port = map.get("port");

        this.list = filelist;
        this.map = image;
    }

    public void send() throws Exception {
        Properties pros = new Properties();
        pros.setProperty("mail.transport.protocol", this.protocol);
        pros.setProperty("mail.host", this.smtp);
//      pros.put("mail.smtp.auth", "true");
//      pros.put("mail.smtp.port", this.port);
        MySendMailAuthenticator ma = new MySendMailAuthenticator(this.username, this.password);
        Session session = Session.getInstance(pros, ma);
        session.setDebug(false);

        MimeMessage msg = createMessage(session);

        Transport ts = session.getTransport();
        ts.connect();
        ts.sendMessage(msg, msg.getAllRecipients());

        ts.close();
    }

    public MimeMessage createMessage(Session session) throws Exception {

        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(this.from));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
        message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
        message.setSubject(this.subject);

        MimeMultipart allMultipart = new MimeMultipart();

        // 创建代表邮件正文和附件的各个MimeBodyPart对象
        MimeBodyPart contentpart = createContent(this.body);
        allMultipart.addBodyPart(contentpart);

        // 创建用于组合邮件正文和附件的MimeMultipart对象
        for (int i = 0; i < list.size(); i++) {
            allMultipart.addBodyPart(createAttachment(list.get(i)));
        }

        // 设置整个邮件内容为最终组合出的MimeMultipart对象
        message.setContent(allMultipart);
        message.saveChanges();
        return message;
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public MimeBodyPart createContent(String body) throws Exception {
        // 创建代表组合Mime消息的MimeMultipart对象,将该MimeMultipart对象保存到MimeBodyPart对象
        MimeBodyPart contentPart = new MimeBodyPart();
        MimeMultipart contentMultipart = new MimeMultipart("related");

        // 创建用于保存HTML正文的MimeBodyPart对象,并将它保存到MimeMultipart中
        MimeBodyPart htmlbodypart = new MimeBodyPart();
        htmlbodypart.setContent(this.body, "text/html;charset=UTF-8");
        contentMultipart.addBodyPart(htmlbodypart);

        if (map != null && map.size() > 0) {
            Set<Entry<String, String>> set = map.entrySet();
            for (Iterator iterator = set.iterator(); iterator.hasNext();) {
                Entry<String, String> entry = (Entry<String, String>) iterator
                        .next();

                // 创建用于保存图片的MimeBodyPart对象,并将它保存到MimeMultipart中
                MimeBodyPart gifBodyPart = new MimeBodyPart();
                FileDataSource fds = new FileDataSource(entry.getValue());// 图片所在的目录的绝对路径

                gifBodyPart.setDataHandler(new DataHandler(fds));
                gifBodyPart.setContentID(entry.getKey()); // cid的值
                contentMultipart.addBodyPart(gifBodyPart);
            }
        }

        // 将MimeMultipart对象保存到MimeBodyPart对象
        contentPart.setContent(contentMultipart);
        return contentPart;
    }

    public MimeBodyPart createAttachment(String filename) throws Exception {
        // 创建保存附件的MimeBodyPart对象,并加入附件内容和相应的信息
        MimeBodyPart attachPart = new MimeBodyPart();
        FileDataSource fsd = new FileDataSource(filename);
        attachPart.setDataHandler(new DataHandler(fsd));
        attachPart.setFileName(new String(fsd.getName().getBytes("utf-8"), "ISO8859-1"));
        return attachPart;
    }

}

3:测试 tomail2 .java

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class tomail2 {
    public static String fileCheck(String fileName) {
        File file = new File(fileName);
        String tag = "0";
        if (file.exists()) {
            tag = "1";
        }
        return tag;
    }
    public static String readFileByLines(String fileName) {
        File file = new File(fileName);
        BufferedReader reader = null;
        String content = "";
        try {
            reader = new BufferedReader(new FileReader(file));
            String tempString = null;
            int line = 1;

            while ((tempString = reader.readLine()) != null) {
                content = content + tempString;
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();

            if (reader != null)
                try {
                    reader.close();
                } catch (IOException localIOException1) {
                }
        } finally {
            if (reader != null)
                try {
                    reader.close();
                } catch (IOException localIOException2) {
                }
        }
        return content;
    }

    public static void main(String[] argv) throws Exception {
        if (argv.length < 4) {
            System.out
                    .println("Usage: java -jar jarfile to cc title content attachment");
            System.exit(0);
        }
        String to = argv[0];
        String cc = argv[1];
        String title = argv[2];
        String content = argv[3];

        Map map = new HashMap();
        map.put("smtp", "10.127.133.50");
        map.put("protocol", "smtp");
        ```
//      map.put("username", "CTU_PRD");
//      map.put("port", "587");
//      map.put("password", "YESjiayou.123");
        map.put("from", "CTU_SUP@cyou-inc.com");

        map.put("to", to);

        map.put("cc", cc);

        map.put("subject", title);

        Map image = new HashMap();

        List list = new ArrayList();

        if (argv.length > 4) {
            String attachment = argv[4];
            if ((attachment != null) && (!"".equals(attachment))) {
                String[] filePaths = (String[]) null;
                if (attachment.contains(","))
                    filePaths = attachment.split(",");
                else if (attachment.contains(";"))
                    filePaths = attachment.split(";");
                else {
                    filePaths = attachment.split(",");
                }
                if (filePaths != null) {
                    list.addAll(Arrays.asList(filePaths));
                }
            }

        }

        map.put("body", content);

        SendMail sm = new SendMail(map, list, image);

        sm.send();
    }

}

<收件人 抄送 标题 内容 附件地址>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
利用Java发送邮件(含附件)的例子 1、邮件发送的配置propertity文件内容如下:(utils.properties文件放在src下面) emailsmtp=smtp.qq.comemailaddress=459104018@qq.comemailpass=******2、读取配置文件的类文件(ReadPropertity.java) import java.io.IOException;import java.util.Properties;public class ReadPropertity { static Properties props = new Properties(); static { try { props.load(ReadPropertity.class.getClassLoader().getResourceAsStream( "utils.properties")); } catch (IOException e1) { e1.printStackTrace(); } } public static String getProperty(String key) { return props.getProperty(key); }}3、邮件处理类(EmailHandle.java)import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.Multipart;import javax.mail.Session;import javax.mail.Transport;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来实现Email的发送, 所用到的协议为:smtp* <p>Company: 疯狂的IT人</p>* time:2013-04-05* @author www.crazyiter.com* @date * @version 1.0 */public class EmailHandle { private MimeMessage mimeMsg; //邮件对象 private Session session; //发送邮件的Session会话 private Properties props;//邮件发送时的一些配置信息的一个属性对象 private String sendUserName; //发件人的用户名 private String sendUserPass; //发件人密码 private Multipart mp;//附件添加的组件 private List files = new LinkedList();//存放附件文件 public EmailHandle(String smtp) { sendUserName = ""; sendUserPass = ""; setSmtpHost(smtp);// 设置邮件服务器 createMimeMessage(); // 创建邮件 } public void setSmtpHost(String hostName) { if (props == null) props = System.getProperties(); props.put("mail.smtp.host", hostName); } public boolean createMimeMessage(){ try { // 用props对象来创建并初始化session对象 session = Session.getDefaultInstance(props, null); } catch (Exception e) { System.err.println("获取邮件会话对象时发生错误!" + e); return false; } try { mimeMsg = new MimeMessage(session); // 用session对象来创建并初始化邮件对象 mp = new MimeMultipart();// 生成附件组件的实例 } catch (Exception e) { return false; } return true; } /** * 设置SMTP的身份认证 */ public void setNeedAuth(boolean need) { if (props == null) props = System.getProperties(); if (need) props.put("mail.smtp.auth", "true"); else props.put("mail.smtp.auth", "false"); } /** * 进行用户身份验证时,设置用户名和密码 */ public void setNamePass(String name, String pass) { sendUserName = name; sendUserPass = pass; } /** * 设置邮件主题 * @param mailSubject * @return */ public boolean setSubject(String mailSubject) { try { mimeMsg.setSubject(mailSubject); } catch (Exception e) { return false; } return true; } /** * 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8 * @param mailBody * @return */ public boolean setBody(String mailBody) { try { BodyPart bp = new MimeBodyPart(); bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>"+ mailBody, "text/html;charset=UTF-8"); // 在组件上添加邮件文本 mp.addBodyPart(bp); } catch (Exception e) { System.err.println("设置邮件正文时发生错误!" + e); return false; } return true; } /** * 增加发送附件 * @param filename * 邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常 * @return */ public boolean addFileAffix(String filename) { try { BodyPart bp = new MimeBodyPart(); FileDataSource fileds = new FileDataSource(filename); bp.setDataHandler(new DataHandler(fileds)); bp.setFileName(MimeUtility.encodeText(fileds.getName(),"utf-8",null)); // 解决附件名称乱码 mp.addBodyPart(bp);// 添加附件 files.add(fileds); } catch (Exception e) { System.err.println("增加邮件附件:" + filename + "发生错误!" + e); return false; } return true; } public boolean delFileAffix(){ try { FileDataSource fileds = null; for(Iterator it = files.iterator() ;it.hasNext();) { fileds = (FileDataSource)it.next(); if(fileds != null && fileds.getFile() != null){ fileds.getFile().delete(); } } }catch (Exception e) { return false; } return true; } /** * 设置发件人地址 * @param from * 发件人地址 * @return */ public boolean setFrom(String from) { try { mimeMsg.setFrom(new InternetAddress(from)); } catch (Exception e) { return false; } return true; } /** * 设置收件人地址 * @param to收件人的地址 * @return */ public boolean setTo(String to) { if (to == null) return false; try { mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to)); } catch (Exception e) { return false; } return true; } /** * 发送附件 * @param copyto * @return */ public boolean setCopyTo(String copyto) { if (copyto == null) return false; try { mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC,InternetAddress.parse(copyto)); } catch (Exception e) { return false; } return true; } /** * 发送邮件 * @return */ public boolean sendEmail() throws Exception{ mimeMsg.setContent(mp); mimeMsg.saveChanges(); System.out.println("正在发送邮件...."); Session mailSession = Session.getInstance(props, null); Transport transport = mailSession.getTransport("smtp"); // 连接邮件服务器并进行身份验证 transport.connect((String) props.get("mail.smtp.host"), sendUserName,sendUserPass); // 发送邮件 transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO)); System.out.println("发送邮件成功!"); transport.close(); return true; }}4、邮件发送的类文件(SendEmail.java)/*** 发送邮件测试* <p>Company: 疯狂的IT人</p>* time:2013-04-05* @author www.crazyiter.com* @date * @version 1.0 */public class SendEmail { public SendEmail() { } /***以后需要两个参数:接收方地址 、 内容***/ public static void send(String subject, String toaddress,String content)throws Exception { String hostName = ReadPropertity.getProperty("emailsmtp"); String fromAddress = ReadPropertity.getProperty("emailaddress"); String fromAPass = ReadPropertity.getProperty("emailpass"); EmailHandle emailHandle = new EmailHandle(hostName); emailHandle.setFrom(fromAddress); emailHandle.setNeedAuth(true); emailHandle.setSubject(subject); emailHandle.setBody(content); emailHandle.setTo(toaddress); emailHandle.setFrom(fromAddress); emailHandle.addFileAffix("D:/myself/help/txt/java环境变量.txt");// 附件文件路径 emailHandle.setNamePass(fromAddress, fromAPass); emailHandle.sendEmail(); } public static void main(String[] args) { try { SendEmail.send("带附件的邮件测试","459104018@qq.com","测试内容<a href='http://www.crazyiter.com'>疯狂的IT人</a>"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}5、发送邮件需要的jar包:activation.jarmail-plugin.jarmail.jar6、打包下载: 疯狂的IT人整理java邮件发送(源码).rar 下载地址: http://www.crazyiter.com/bbs/forum.php?mod=attachment&aid=MjF8MzQzOTYzZjB8MTM2NTE3NjczMHwxfDExNDA%3D

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值