javamail实现发送邮件
来源:互联网 发布:出租车gps数据 编辑:程序博客网 时间:2024/06/06 02:48
今天写了邮件相关的api,小小的总结一下。先来了解一下邮件发送的过程,一封邮件发出,先发送到你的邮件服务器上,由你的邮件服务器发送到目标邮件服务器,再由目标邮件服务器转发到目标地址,区别于点对点传输。
javamail封装了邮件操作的基本类,利用javamail来实现邮件发送,要先下载mail.jar包,加到项目中,jdk版本要在1.6及以上。下面例子结合了struts框架,来看下例子:
public String sendMail() {//发送邮件(action中的方法)
try{
ActionContext actionContext = ActionContext.getContext();
Map<String, Object> session = actionContext.getSession();
Mail umail=(Mail) session.get("user");
Authenticator auth = new SmtpAuthenticator( umail.getUsername(), umail.getPassword());
Properties mailProps = new Properties();
//用户校验
mailProps.put("mail.smtp.auth", "true");
//启用ssl
mailProps.put("mail.smtp.ssl.enable", "true");
//设置端口号
mailProps.put("mail.smtp.port", "465");
//不做服务器证书校验
mailProps.put("mail.smtp.ssl.checkserveridentity", "false");
//设置信任的地址
mailProps.put("mail.smtp.ssl.trust", mail.getSmtp_server());
//账户名
mailProps.put("username", umail.getUsername());
//密码
mailProps.put("password",umail.getPassword());
//邮件服务器主机
mailProps.put("mail.smtp.host", mail.getSmtp_server());
//获取session连接
Session mailSession = Session.getDefaultInstance(mailProps, auth);
//开启debug方便查错
mailSession.setDebug(true);
MimeMessage message = new MimeMessage(mailSession);
//发件人地址
message.setFrom(new InternetAddress(umail.getUsername()));
//收件人地址
String tt=mail.getTo_mail_address();
if(tt!=null&&!tt.equals("")){
String str[]=mail.getTo_mail_address().split("\\;");
Address address [] =new InternetAddress[str.length];
for(int i=0;i<str.length;i++){
address[i]=new InternetAddress(str[i]);
}
message.setRecipients(Message.RecipientType.TO,address);
}
//抄送人地址
String cc=mail.getCc_mail_address();
if(cc!=null&&!cc.equals("")){
String str1[]=mail.getCc_mail_address().split("\\;");
Address address1 [] =new InternetAddress[str1.length];
for(int i=0;i<str1.length;i++){
address1[i]=new InternetAddress(str1[i]);
}
message.setRecipients(Message.RecipientType.CC,address1);
}
//添加标题
message.setSubject(mail.getTitle());
//添加邮件内容
MimeMultipart multi = new MimeMultipart();
BodyPart textBodyPart = new MimeBodyPart();
textBodyPart.setText(mail.getContext());
multi.addBodyPart(textBodyPart);
if(mail.getAttachment()!=null){
//添加附件
BodyPart messageBodyPart= new MimeBodyPart();
FileDataSource source = new FileDataSource(mail.getAttachment());
//添加附件的内容
messageBodyPart.setDataHandler(new DataHandler(source));
//解决标题乱码
messageBodyPart.setFileName(MimeUtility.encodeText(mail.getAttachmentFileName()));
multi.addBodyPart(messageBodyPart);
}
message.setContent(multi);
message.saveChanges();
Transport.send(message);
}catch (Exception ex) {
System.err.println("邮件发送失败:" + ex.getMessage());
System.err.println("错误原因:");
ex.printStackTrace(System.err);
}
}
public class Mail {//操作类
private String username;//账户名
private String password;//密码
private String smtp_server="mail.myhexin.com";//主机
private String to_mail_address;//收件地址
private String cc_mail_address;//抄送地址
private File attachment;//附件文件
private String title;//主题
private String context;//内容
private String attachmentContentType; // 文件的内容类型
private String attachmentFileName; // 上传文件名
..............//getter、setter函数
}
public class SmtpAuthenticator extends Authenticator {//用户验证
private String username;
private String password;
public SmtpAuthenticator(String username, String password) {
this.username = username;
this.password = password;
}
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(this.username, this.password);
}
}
<action name="sendmail" class="com.myhexin.action.MailTest" method="sendMail">
<interceptor-ref name="fileUpload">
<!-- 可以支持上传的文件类型 -->
<param name="allowedTypes">
text/plain<!--application/pdf image/jpg,image/jpeg,image/pjpegapplication/msword -->
</param>
<!-- 设置上传文件的大小不能超过1M -->
<param name="maximumSize">1024*1024</param>
</interceptor-ref>
<!-- 必须配置系统默认的拦截器 -->
<interceptor-ref name="defaultStack" />
<result name="success">success.jsp</result>
</action>
这个例子是由前端发送请求发送邮件,实际应用中最好封装成工具类,有需要时直接调用最好。
javamail封装了邮件操作的基本类,利用javamail来实现邮件发送,要先下载mail.jar包,加到项目中,jdk版本要在1.6及以上。下面例子结合了struts框架,来看下例子:
public String sendMail() {//发送邮件(action中的方法)
try{
ActionContext actionContext = ActionContext.getContext();
Map<String, Object> session = actionContext.getSession();
Mail umail=(Mail) session.get("user");
Authenticator auth = new SmtpAuthenticator( umail.getUsername(), umail.getPassword());
Properties mailProps = new Properties();
//用户校验
mailProps.put("mail.smtp.auth", "true");
//启用ssl
mailProps.put("mail.smtp.ssl.enable", "true");
//设置端口号
mailProps.put("mail.smtp.port", "465");
//不做服务器证书校验
mailProps.put("mail.smtp.ssl.checkserveridentity", "false");
//设置信任的地址
mailProps.put("mail.smtp.ssl.trust", mail.getSmtp_server());
//账户名
mailProps.put("username", umail.getUsername());
//密码
mailProps.put("password",umail.getPassword());
//邮件服务器主机
mailProps.put("mail.smtp.host", mail.getSmtp_server());
//获取session连接
Session mailSession = Session.getDefaultInstance(mailProps, auth);
//开启debug方便查错
mailSession.setDebug(true);
MimeMessage message = new MimeMessage(mailSession);
//发件人地址
message.setFrom(new InternetAddress(umail.getUsername()));
//收件人地址
String tt=mail.getTo_mail_address();
if(tt!=null&&!tt.equals("")){
String str[]=mail.getTo_mail_address().split("\\;");
Address address [] =new InternetAddress[str.length];
for(int i=0;i<str.length;i++){
address[i]=new InternetAddress(str[i]);
}
message.setRecipients(Message.RecipientType.TO,address);
}
//抄送人地址
String cc=mail.getCc_mail_address();
if(cc!=null&&!cc.equals("")){
String str1[]=mail.getCc_mail_address().split("\\;");
Address address1 [] =new InternetAddress[str1.length];
for(int i=0;i<str1.length;i++){
address1[i]=new InternetAddress(str1[i]);
}
message.setRecipients(Message.RecipientType.CC,address1);
}
//添加标题
message.setSubject(mail.getTitle());
//添加邮件内容
MimeMultipart multi = new MimeMultipart();
BodyPart textBodyPart = new MimeBodyPart();
textBodyPart.setText(mail.getContext());
multi.addBodyPart(textBodyPart);
if(mail.getAttachment()!=null){
//添加附件
BodyPart messageBodyPart= new MimeBodyPart();
FileDataSource source = new FileDataSource(mail.getAttachment());
//添加附件的内容
messageBodyPart.setDataHandler(new DataHandler(source));
//解决标题乱码
messageBodyPart.setFileName(MimeUtility.encodeText(mail.getAttachmentFileName()));
multi.addBodyPart(messageBodyPart);
}
message.setContent(multi);
message.saveChanges();
Transport.send(message);
}catch (Exception ex) {
System.err.println("邮件发送失败:" + ex.getMessage());
System.err.println("错误原因:");
ex.printStackTrace(System.err);
}
}
public class Mail {//操作类
private String username;//账户名
private String password;//密码
private String smtp_server="mail.myhexin.com";//主机
private String to_mail_address;//收件地址
private String cc_mail_address;//抄送地址
private File attachment;//附件文件
private String title;//主题
private String context;//内容
private String attachmentContentType; // 文件的内容类型
private String attachmentFileName; // 上传文件名
..............//getter、setter函数
}
public class SmtpAuthenticator extends Authenticator {//用户验证
private String username;
private String password;
public SmtpAuthenticator(String username, String password) {
this.username = username;
this.password = password;
}
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(this.username, this.password);
}
}
<action name="sendmail" class="com.myhexin.action.MailTest" method="sendMail">
<interceptor-ref name="fileUpload">
<!-- 可以支持上传的文件类型 -->
<param name="allowedTypes">
text/plain<!--application/pdf image/jpg,image/jpeg,image/pjpegapplication/msword -->
</param>
<!-- 设置上传文件的大小不能超过1M -->
<param name="maximumSize">1024*1024</param>
</interceptor-ref>
<!-- 必须配置系统默认的拦截器 -->
<interceptor-ref name="defaultStack" />
<result name="success">success.jsp</result>
</action>
这个例子是由前端发送请求发送邮件,实际应用中最好封装成工具类,有需要时直接调用最好。
0 0
- JavaMail 实现邮件发送
- javamail实现邮件发送
- Javamail实现邮件发送
- JavaMail实现邮件发送
- javaMail实现邮件发送
- javamail实现发送邮件
- Javamail实现邮件发送
- javaMail实现发送邮件
- JAVAMAIL实现发送邮件
- javamail 实现邮件的发送
- JavaMail发送邮件功能实现
- javamail实现互联网邮件发送
- JavaMail发送邮件简单实现
- JavaMail技术实现邮件发送
- struts2+javamail实现邮件发送
- andriod-javamail 实现发送邮件
- 使用javamail实现发送邮件
- JavaMail实现邮件的发送
- oracle 11g新特性:Pending Statistics
- LINUX VPS主机之间快速复制备份搬家
- oracle 存储过程执行权限
- oracle O7_DICTIONARY_ACCESSIBILITY参数
- oracle 数据块结构
- javamail实现发送邮件
- PL/SQL导入SQL文件乱码用PL/SQL的importtables->sqlinsert
- ORACLE中CONSTRAINT的四对属性
- Oracle Profile 使用详解
- Android Fragment 真正的完全解析(下)
- oracle 11g database control 证书错误
- MT7620 修改 默认 ip
- pl/sql连不上oracle数据库
- Java arraylist线程不安全 vectory 线程安全