Java Send EMail with Attachment

上一篇聊到Java发送邮件的jar包JavaMail的使用,但是不涉及如何发送带附件的邮件,这里就说一下如何发送附件!

1.下载javax.mail.jar

下载地址:

https://java.net/projects/javamail/pages/Home

2.Mail.java

      
    import java.util.* ;  
    import java.io.* ;  
    import javax.mail.* ;  
    import javax.mail.internet.* ;  
    import javax.activation.* ;  
    public class Mail {  
        //定义发件人、收件人、SMTP服务器、用户名、密码、主题、内容等  
        private String displayName;  
        private String to;  
        private String from;  
        private String smtpServer;  
        private String username;  
        private String password;  
        private String subject;  
        private String content;  
        private boolean ifAuth; //服务器是否要身份认证  
        private String filename="";  
        private Vector file = new Vector(); //用于保存发送附件的文件名的集合  
         
         
        /** 
         * 设置SMTP服务器地址 
         */  
        public void setSmtpServer(String smtpServer){  
            this.smtpServer=smtpServer;  
        }  
         
        /** 
         * 设置发件人的地址 
         */  
        public void setFrom(String from){  
            this.from=from;  
        }  
        /** 
         * 设置显示的名称 
         */  
        public void setDisplayName(String displayName){  
            this.displayName=displayName;  
        }  
         
        /** 
         * 设置服务器是否需要身份认证 
         */  
        public void setIfAuth(boolean ifAuth){  
            this.ifAuth=ifAuth;  
        }  
         
        /** 
         * 设置E-mail用户名 
         */  
        public void setUserName(String username){  
            this.username=username;  
        }  
         
        /** 
         * 设置E-mail密码 
         */  
        public void setPassword(String password){  
            this.password=password;  
        }  
         
        /** 
         * 设置接收者 
         */  
        public void setTo(String to){  
            this.to=to;  
        }  
         
        /** 
         * 设置主题 
         */  
        public void setSubject(String subject){  
            this.subject=subject;  
        }  
         
        /** 
         * 设置主体内容 
         */  
        public void setContent(String content){  
            this.content=content;  
        }  
         
        /** 
         * 该方法用于收集附件名 
         */  
        public void addAttachfile(String fname){  
            file.addElement(fname);  
        }  
         
        public Mail(){  
             
        }  
         
        /** 
         * 初始化SMTP服务器地址、发送者E-mail地址、用户名、密码、接收者、主题、内容 
         */  
        public Mail(String smtpServer,String from,String displayName,String username,String password,String to,String subject,String content){  
            this.smtpServer=smtpServer;  
            this.from=from;  
            this.displayName=displayName;  
            this.ifAuth=true;  
            this.username=username;  
            this.password=password;  
            this.to=to;  
            this.subject=subject;  
            this.content=content;  
        }  
         
        /** 
         * 初始化SMTP服务器地址、发送者E-mail地址、接收者、主题、内容 
         */  
        public Mail(String smtpServer,String from,String displayName,String to,String subject,String content){  
            this.smtpServer=smtpServer;  
            this.from=from;  
            this.displayName=displayName;  
            this.ifAuth=false;  
            this.to=to;  
            this.subject=subject;  
            this.content=content;  
        }  
      
        /** 
         * 发送邮件 
         */  
        public HashMap send(){  
            HashMap map=new HashMap();  
            map.put("state", "success");  
            String message="邮件发送成功!";  
            Session session=null;  
            Properties props = System.getProperties();  
            props.put("mail.smtp.host", smtpServer);  
            if(ifAuth){ //服务器需要身份认证  
                props.put("mail.smtp.auth","true");     
                SmtpAuth smtpAuth=new SmtpAuth(username,password);  
                session=Session.getDefaultInstance(props, smtpAuth);   
            }else{  
                props.put("mail.smtp.auth","false");  
                session=Session.getDefaultInstance(props, null);  
            }  
            session.setDebug(true);  
            Transport trans = null;    
            try {  
                Message msg = new MimeMessage(session);   
                try{  
                    Address from_address = new InternetAddress(from, displayName);  
                    msg.setFrom(from_address);  
                }catch(java.io.UnsupportedEncodingException e){  
                    e.printStackTrace();  
                }  
                InternetAddress[] address={new InternetAddress(to)};  
                msg.setRecipients(Message.RecipientType.TO,address);  
                msg.setSubject(subject);  
                Multipart mp = new MimeMultipart();  
                MimeBodyPart mbp = new MimeBodyPart();  
                mbp.setContent(content.toString(), "text/html;charset=gb2312");  
                mp.addBodyPart(mbp);    
                if(!file.isEmpty()){//有附件  
                    Enumeration efile=file.elements();  
                    while(efile.hasMoreElements()){   
                        mbp=new MimeBodyPart();  
                        filename=efile.nextElement().toString(); //选择出每一个附件名  
                        FileDataSource fds=new FileDataSource(filename); //得到数据源  
                        mbp.setDataHandler(new DataHandler(fds)); //得到附件本身并至入BodyPart  
                        mbp.setFileName(fds.getName());  //得到文件名同样至入BodyPart  
                        mp.addBodyPart(mbp);  
                    }    
                    file.removeAllElements();      
                }   
                msg.setContent(mp); //Multipart加入到信件  
                msg.setSentDate(new Date());     //设置信件头的发送日期  
                //发送信件  
                msg.saveChanges();   
                trans = session.getTransport("smtp");  
                trans.connect(smtpServer, username, password);  
                trans.sendMessage(msg, msg.getAllRecipients());  
                trans.close();  
                 
            }catch(AuthenticationFailedException e){     
                 map.put("state", "failed");  
                 message="邮件发送失败!错误原因:\n"+"身份验证错误!";  
                 e.printStackTrace();   
            }catch (MessagingException e) {  
                 message="邮件发送失败!错误原因:\n"+e.getMessage();  
                 map.put("state", "failed");  
                 e.printStackTrace();  
                 Exception ex = null;  
                 if ((ex = e.getNextException()) != null) {  
                     System.out.println(ex.toString());  
                     ex.printStackTrace();  
                 }   
            }  
            //System.out.println("\n提示信息:"+message);  
            map.put("message", message);  
            return map;  
        }  
         
    }

2.信息认证

public class SmtpAuth extends javax.mail.Authenticator {   
    private String username,password;   
      
    public SmtpAuth(String username,String password){   
        this.username = username;    
        this.password = password;    
    }   
    protected javax.mail.PasswordAuthentication getPasswordAuthentication() {   
        return new javax.mail.PasswordAuthentication(username,password);   
    }   
}

3.测试类

public class TestJavaMail {
	public static void main(String[] args){
		String smtpServer = "smtp.163.com";
		String from = "justin@163.com";
		String displayName = "justin";
		String username = "justin@163.com";
		String password = "**********";
		String to = "justinf2@163.com";
		String subject = "this is subject";
		String content = "this is content";
		System.out.println("send emial start。");
		Mail mail = new Mail(smtpServer,from,displayName,username,password,to,subject,content);
		mail.addAttachfile("D:\\1.png");
		mail.send();
		System.out.println("send emial end。");
	}
}

总结:

mail类支持发送多个附件!

As an AI language model, I am not able to add attachments to messages. However, I can provide you with examples of how to add attachments in different programming languages: In Python, you can use the `EmailMessage()` class from the `email` module to create and send an email message with attachments: ```python import smtplib from email.message import EmailMessage msg = EmailMessage() msg['Subject'] = 'Email with attachments' msg['From'] = 'sender@example.com' msg['To'] = 'recipient@example.com' msg.set_content('This email contains attachments') with open('file1.txt', 'rb') as f1, open('file2.txt', 'rb') as f2: file1_data = f1.read() file2_data = f2.read() msg.add_attachment(file1_data, maintype='text', subtype='plain', filename='file1.txt') msg.add_attachment(file2_data, maintype='text', subtype='plain', filename='file2.txt') with smtplib.SMTP('smtp.gmail.com', 587) as smtp: smtp.ehlo() smtp.starttls() smtp.login('sender@gmail.com', 'password') smtp.send_message(msg) ``` In Java, you can use the JavaMail API to create and send an email message with attachments: ```java import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; 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.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; public class EmailExample { public static void main(String[] args) { String to = "recipient@example.com"; String from = "sender@example.com"; String host = "smtp.example.com"; Properties properties = System.getProperties(); properties.setProperty("mail.smtp.host", host); Session session = Session.getDefaultInstance(properties); try { MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress(from)); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); msg.setSubject("Email with attachments"); MimeMultipart multipart = new MimeMultipart(); MimeBodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText("This email contains attachments"); multipart.addBodyPart(messageBodyPart); messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource("file1.txt"); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName("file1.txt"); multipart.addBodyPart(messageBodyPart); messageBodyPart = new MimeBodyPart(); source = new FileDataSource("file2.txt"); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName("file2.txt"); multipart.addBodyPart(messageBodyPart); msg.setContent(multipart); Transport.send(msg); System.out.println("Email sent successfully"); } catch (MessagingException mex) { mex.printStackTrace(); } } } ``` Note: Please replace the placeholders with the actual values of your email credentials, file paths, etc.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值