📄 sendmailvj.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 + -