⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendmailvj.c

📁 JavaMail的邮件发送程序例
💻 C
字号:
标  题: 使用JavaMail的邮件发送程序例子
发信站: BBS 水木清华站 (Tue Jul  2 16:46:20 2002)

/*
使用JavaMail的SMTP邮件发送测试程序
支持SMTP认证,支持多个附件
以<html>和<HTML>开始的内容体作为text/html类型

 SMTP.java

需要JDK1.2以上和
javamail包 (mail.jar, http://java.sun.com/products/javamail)
和javabeans activation framework包 (activation.jar, http://java.sun.com/products/javabeans/software/)

在J2EE中已经包含上述两个包

作者: guojunbo@sina.com 
*/

import javax.mail.*;
import java.util.*;
import javax.mail.internet.*;
import java.io.*;
import javax.activation.*;

class SMTP{
        String m_user=null;     //用于需要验证的用户名
        String m_pass=null;     //口令
        String m_server=null;   //SMTP服务器名称
        int m_port=25;          //端口号,缺省为25
        
        String m_from=null;     //发件人
        String m_to=null;       //收件人
        String m_cc=null;       //抄送
        String m_bcc=null;      //密送
        String m_subject=null;  //主题
        String m_body=null;     //内容体
        LinkedList m_attach=null;       //附件的文件名列表
        
        SMTP(){
        }
        
        
        //设定smtp服务器用户名(可选)
        public void setUser(String user){
                m_user=user;
        }
        
        
        //设定smtp服务器口令(可选)
        public void setPass(String pass){
                m_pass=pass;
        }
        
        //设定smtp的地址和端口号(可选)
        public void setServer(String server,int port){
                if(port>0) m_port=port;
                m_server=server;
        }
        
        //设定smtp服务器地址,端口号使用缺省值
        public void setServer(String server){
                m_server=server;
        }
        
        //发件人
        public void setFrom(String from){
                m_from = from;
        }
        
        //收件人
        public void setTo(String to){
                m_to = to;
        }
        
        //抄送(可选)
        public void setCc(String cc){
                m_cc=cc;
        }
        
        //密送(可选)
        public void setBcc(String bcc){
                m_bcc=bcc;
        }
        
        //设置新的主题(可选)
        public void setSubject(String subject){
                m_subject=subject;
        }
        
        //设置信的内容,若以<html>或<HTML>开头的内容为text/html格式
        public void setBody(String body){
                m_body=body;
        }
        
        //可以多次添加附件,文件名最好是全路径,使用相对路径容易出错
        public void attach(String attachfile){
                if(m_attach==null) m_attach=new LinkedList();
                m_attach.add(attachfile);
        }
        
        public boolean sendMail() throws Exception{
                
                Properties props=System.getProperties();
                props.setProperty("mail.transport.protocol","smtp");    //smtp协议
                props.setProperty("mail.smtp.host",m_server);   //服务器地址
                props.setProperty("mail.smtp.port",""+m_port);  //端口号
                
                
                //认证信息
                if(m_user!=null && m_pass!=null && m_user.length()>0 && m_pass.length()>0){
                        props.setProperty("mail.smtp.auth","true");
                }
                
                
                javax.mail.Session sess = javax.mail.Session.getDefaultInstance(props, null);
                
                
                
                MimeMessage msg=new MimeMessage(sess);
                
                //发件人
                msg.setFrom(new InternetAddress(m_from));
                
                //收件人、抄送、密送
                msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(m_to));
                if(m_cc!=null && m_cc.length()>0)
                        msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(m_cc));
                if(m_bcc!=null && m_bcc.length()>0)
                        msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(m_bcc));
                
                //主题
                if(m_subject!=null) msg.setSubject(m_subject);
                
                //发件日期
                msg.setSentDate(new Date());
                
                //文本内容
                MimeMultipart content=new MimeMultipart();
                if(content==null) return false;
                
                MimeBodyPart part;
                if(m_body!=null && m_body.length()>0){
                        part=new MimeBodyPart();
                        String type="text/plain";
                        if(m_body.startsWith("<html>") || m_body.startsWith("<HTML>")){
                                type="text/html";
                        }
                        part.setText(m_body);
                        
                        //以<html>和<HTML>开始的文本为text/html类型
                        part.setHeader("Content-Type",type);
                                                
                        content.addBodyPart(part);
                        
                }
                
                //添加附件
                if(m_attach!=null){
                        
                        String filename;
                        Iterator it=m_attach.iterator();
                        
                        while(it.hasNext()){
                                filename=(String)it.next();
                                if(filename==null || filename.length()<=0) continue;
                                                        
                                part=new MimeBodyPart();
                                FileDataSource fds = new FileDataSource(filename);
                                part.setDataHandler(new DataHandler(fds));
                                part.setFileName(MimeUtility.encodeText(fds.getName()));
                                
                                content.addBodyPart(part);
                        }
                }
                
                //保存修改
                msg.setContent(content);
                msg.saveChanges();
                
                //如果需要验证用户(如:smtp.sina.com.cn),则使用connect并sendMessage
                //注意必须设定mail.smtp.auth属性为true
                if(m_user!=null && m_pass!=null && m_user.length()>0 && m_pass.length()>0){
                        Transport trans=sess.getTransport();
                        trans.connect(m_server,m_user,m_pass);
                        trans.sendMessage(msg,InternetAddress.parse(m_to));
                        trans.close();
                }
                //否则,不需要用户名和口令使用静态方法发送由件
                else Transport.send(msg);
                        
                return true;
        }
        
        public static void main(String argv[]) throws Exception{
        
                
                SMTP smtp=new SMTP();
                smtp.setFrom("guojunbo@sina.com");
                smtp.setTo("jgb@ict.ac.cn");
                //smtp.setCc("guojunbo<jgb@ict.ac.cn>,jgb@ict.ac.cn");
                //smtp.setServer("159.226.39.4");
                
                smtp.setServer("smtp.sina.com.cn");
                smtp.setUser("user");
                smtp.setPass("pass");
                
                smtp.setSubject("你好,测试由件");
                smtp.setBody("<html><a href=hh>你好</a>,我的朋友\r\n还有</html>");
                smtp.attach("c:\\ic.txt");
                //smtp.attach("c:\\863.doc");
                
                boolean ret = smtp.sendMail();  
                
        }
        
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -