- 浏览: 72671 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
liyuanhoa:
SSH 和FreeMarker 动态网页生成静态技术 事例 -
xiao-qiang163:
做的项目,界面很花哨, “好看”但不中用。
做的项目的截图
package com.hyq.test;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class MailExample {
public static void main (String args[]) throws Exception {
String host = "smtp.163.com"; //发件人使用发邮件的电子信箱服务器
String from = "你自己的电子信箱"; //发邮件的出发地(发件人的信箱)
String to = "收件人信箱"; //发邮件的目的地(收件人信箱)
// Get system properties
Properties props = System.getProperties();
// Setup mail server
props.put("mail.smtp.host", host);
// Get session
props.put("mail.smtp.auth", "true"); //这样才能通过验证
MyAuthenticator myauth = new MyAuthenticator("你自己的电子信箱", "你自己的信箱密码");
Session session = Session.getDefaultInstance(props, myauth);
// session.setDebug(true);
// Define message
MimeMessage message = new MimeMessage(session);
// Set the from address
message.setFrom(new InternetAddress(from));
// Set the to address
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set the subject
message.setSubject("测试程序!");
// Set the content
message.setText("这是用java写的发送电子邮件的测试程序!");
message.saveChanges();
Transport.send(message);
}
}
校验发信人权限的方法
package com.hyq.test;
import javax.mail.PasswordAuthentication;
class MyAuthenticator
extends javax.mail.Authenticator {
private String strUser;
private String strPwd;
public MyAuthenticator(String user, String password) {
this.strUser = user;
this.strPwd = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(strUser, strPwd);
}
}
注意:上面的事例仅为使用163信箱时发送电子邮件的方法,因为使用的host为:smtp.163.com,如源代码中:String host = "smtp.163.com"; //发件人使用发邮件的电子信箱服务器,如果使用其它的电子邮件发送,就必须在其邮件服务器上查找相应的电子邮件服务器,例如搜狐就要使用smtp.sohu.com,具体情况具体对待,都可以从所使用的邮件服务器上获得的。如果没有使用host ,也就是说,没有进行props.put("mail.smtp.host", host);设置,那么就会抛javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;的异常。当然了,如果你没有正确配置,这个异常仍然会被抛出的。
有些邮件服务系统是不需要验证发件人的授权的,所以可以很简单的使用
Session session = Session.getDefaultInstance(props, null);
而不必使用
props.put("mail.smtp.auth", "true");
MyAuthenticator myauth = new MyAuthenticator("你自己的电子信箱", "你自己的信箱密码");
Session session = Session.getDefaultInstance(props, myauth);
就可以发送电子邮件了,这个多为一些企事业单位的内部电子信箱系统。
但是对于很多门户网站上的电邮系统,如:163,sohu,yahoo等等,如果仍然简单的这样使用就会抛
com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required,smtp8,wKjADxuAyCAfmnZE8BwtIA==.32705S2
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
at javax.mail.Transport.send0(Transport.java:169)
at javax.mail.Transport.send(Transport.java:98)
这样的异常,要求你必须进行授权校验,它的目的就是阻止他人任意乱发邮件,也算是为了减少垃圾邮件的出现吧。这时候,我们就要使用
props.put("mail.smtp.auth", "true");
MyAuthenticator myauth = new MyAuthenticator("你自己的电子信箱", "你自己的信箱密码");
Session session = Session.getDefaultInstance(props, myauth);
这里还有一个特别注意的事情:在你使用Session.getDefaultInstance时,一定要将 props.put("mail.smtp.auth", "true"); 置为true,它默认的是false,如果你没有做这一步,虽然你使用了Session.getDefaultInstance(props, myauth);,你自己也确实 MyAuthenticator myauth = new MyAuthenticator("你自己的电子信箱", "你自己的信箱密码");但是它仍然会抛出
com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required,smtp8,wKjADxJA2SBrm3ZEFv0gIA==.40815S2
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
at javax.mail.Transport.send0(Transport.java:169)
at javax.mail.Transport.send(Transport.java:98)
这样的异常。我就在这一步费了好长时间,后来才发现了这个问题,很是郁闷。不过还好,总算解决了。
其实上面的做法只是比较简单的一种,也有很多其它的写法,如:
Properties props = System.getProperties();可以使用
Properties props = new Properties();来代替。
Transport.send(message);可以使用下面的代码来代替
String username = "你的电子信箱用户名";
String password = "你的电子信箱密码";
message.saveChanges(); // implicit with send()
Transport transport = session.getTransport("smtp");
transport.connect("mail.htf.com.cn", username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
这种方法在同时发送多封电子邮件时比较有用。
还有一些具体的相关概念,可以查看相关的官方文档,在我查询资料时,发现了一篇文章写得相当仔细,可以加以参考:http://www.matrix.org.cn/resource/article/44/44101_JavaMail.html
另附上使用org.apache.commons.mail进行发电子邮件的示例:
import org.apache.commons.mail.SimpleEmail;
import org.apache.commons.mail.*;
public class TestCommon {
public TestCommon() {
}
public static void main(String[] args){
SimpleEmail email = new SimpleEmail();
email.setHostName("smtp.163.com");//设置使用发电子邮件的邮件服务器
try {
email.addTo("收件人信箱");
email.setAuthentication("发件人信箱","发件人信箱密码");
email.setFrom("发件人信箱");
email.setSubject("Test apache.commons.mail message");
email.setMsg("This is a simple test of commons-email");
email.send();
}
catch (EmailException ex) {
ex.printStackTrace();
}
}
}
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class MailExample {
public static void main (String args[]) throws Exception {
String host = "smtp.163.com"; //发件人使用发邮件的电子信箱服务器
String from = "你自己的电子信箱"; //发邮件的出发地(发件人的信箱)
String to = "收件人信箱"; //发邮件的目的地(收件人信箱)
// Get system properties
Properties props = System.getProperties();
// Setup mail server
props.put("mail.smtp.host", host);
// Get session
props.put("mail.smtp.auth", "true"); //这样才能通过验证
MyAuthenticator myauth = new MyAuthenticator("你自己的电子信箱", "你自己的信箱密码");
Session session = Session.getDefaultInstance(props, myauth);
// session.setDebug(true);
// Define message
MimeMessage message = new MimeMessage(session);
// Set the from address
message.setFrom(new InternetAddress(from));
// Set the to address
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set the subject
message.setSubject("测试程序!");
// Set the content
message.setText("这是用java写的发送电子邮件的测试程序!");
message.saveChanges();
Transport.send(message);
}
}
校验发信人权限的方法
package com.hyq.test;
import javax.mail.PasswordAuthentication;
class MyAuthenticator
extends javax.mail.Authenticator {
private String strUser;
private String strPwd;
public MyAuthenticator(String user, String password) {
this.strUser = user;
this.strPwd = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(strUser, strPwd);
}
}
注意:上面的事例仅为使用163信箱时发送电子邮件的方法,因为使用的host为:smtp.163.com,如源代码中:String host = "smtp.163.com"; //发件人使用发邮件的电子信箱服务器,如果使用其它的电子邮件发送,就必须在其邮件服务器上查找相应的电子邮件服务器,例如搜狐就要使用smtp.sohu.com,具体情况具体对待,都可以从所使用的邮件服务器上获得的。如果没有使用host ,也就是说,没有进行props.put("mail.smtp.host", host);设置,那么就会抛javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;的异常。当然了,如果你没有正确配置,这个异常仍然会被抛出的。
有些邮件服务系统是不需要验证发件人的授权的,所以可以很简单的使用
Session session = Session.getDefaultInstance(props, null);
而不必使用
props.put("mail.smtp.auth", "true");
MyAuthenticator myauth = new MyAuthenticator("你自己的电子信箱", "你自己的信箱密码");
Session session = Session.getDefaultInstance(props, myauth);
就可以发送电子邮件了,这个多为一些企事业单位的内部电子信箱系统。
但是对于很多门户网站上的电邮系统,如:163,sohu,yahoo等等,如果仍然简单的这样使用就会抛
com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required,smtp8,wKjADxuAyCAfmnZE8BwtIA==.32705S2
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
at javax.mail.Transport.send0(Transport.java:169)
at javax.mail.Transport.send(Transport.java:98)
这样的异常,要求你必须进行授权校验,它的目的就是阻止他人任意乱发邮件,也算是为了减少垃圾邮件的出现吧。这时候,我们就要使用
props.put("mail.smtp.auth", "true");
MyAuthenticator myauth = new MyAuthenticator("你自己的电子信箱", "你自己的信箱密码");
Session session = Session.getDefaultInstance(props, myauth);
这里还有一个特别注意的事情:在你使用Session.getDefaultInstance时,一定要将 props.put("mail.smtp.auth", "true"); 置为true,它默认的是false,如果你没有做这一步,虽然你使用了Session.getDefaultInstance(props, myauth);,你自己也确实 MyAuthenticator myauth = new MyAuthenticator("你自己的电子信箱", "你自己的信箱密码");但是它仍然会抛出
com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required,smtp8,wKjADxJA2SBrm3ZEFv0gIA==.40815S2
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
at javax.mail.Transport.send0(Transport.java:169)
at javax.mail.Transport.send(Transport.java:98)
这样的异常。我就在这一步费了好长时间,后来才发现了这个问题,很是郁闷。不过还好,总算解决了。
其实上面的做法只是比较简单的一种,也有很多其它的写法,如:
Properties props = System.getProperties();可以使用
Properties props = new Properties();来代替。
Transport.send(message);可以使用下面的代码来代替
String username = "你的电子信箱用户名";
String password = "你的电子信箱密码";
message.saveChanges(); // implicit with send()
Transport transport = session.getTransport("smtp");
transport.connect("mail.htf.com.cn", username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
这种方法在同时发送多封电子邮件时比较有用。
还有一些具体的相关概念,可以查看相关的官方文档,在我查询资料时,发现了一篇文章写得相当仔细,可以加以参考:http://www.matrix.org.cn/resource/article/44/44101_JavaMail.html
另附上使用org.apache.commons.mail进行发电子邮件的示例:
import org.apache.commons.mail.SimpleEmail;
import org.apache.commons.mail.*;
public class TestCommon {
public TestCommon() {
}
public static void main(String[] args){
SimpleEmail email = new SimpleEmail();
email.setHostName("smtp.163.com");//设置使用发电子邮件的邮件服务器
try {
email.addTo("收件人信箱");
email.setAuthentication("发件人信箱","发件人信箱密码");
email.setFrom("发件人信箱");
email.setSubject("Test apache.commons.mail message");
email.setMsg("This is a simple test of commons-email");
email.send();
}
catch (EmailException ex) {
ex.printStackTrace();
}
}
}
- sendemail.rar (387 KB)
- 下载次数: 6
发表评论
-
java读取text乱码
2011-06-16 09:01 1294Java读取TXT文本文件乱码 ... -
java swing 列别介绍
2011-06-15 12:43 753在IBM的论坛上看到一篇比较好的文章晒出来给大家看看 [url ... -
URL 中的#号的作用
2011-04-07 09:30 733本文转载于: http://news.cnblogs.com/ ... -
类的序列话 和反序列话
2011-03-30 11:40 754public static String SerializeT ... -
一种做输入的校验 同是可以验证不让粘贴复制
2011-03-29 17:28 829jQuery(function($){ $(" ... -
div中的字体溢出 保证制动换行 ie 火狐兼容
2011-03-25 12:04 1011在定义div是加如下样式,可能还会有好多的情况 这个就要视情况 ... -
div 的自动扩充 火狐 ie的兼容
2011-03-22 16:35 750好久没有发表文章了 今天在修改页面的时候用到了 div 的自动 ... -
Hibernate中的lazy的使用说明
2010-12-21 22:50 759好久没有看有关hibernate ... -
DWR+JSON实现的万能的N级联动
2010-12-19 19:35 896在我们的项目中用到了一个查询分类的地方要用到N级联动具体是多少 ... -
js 实现的div点击上下 进行滚动翻页的function
2010-12-11 22:58 1219... -
各种浏览器之间的兼容性问题
2010-12-06 13:24 576http://blog.csdn.net/vince6799/ ... -
Struts文件上传
2010-11-29 00:46 822今天在项目中遇到了一个非常恶心的问题,用到了struts2的文 ... -
在tomcat中直接配置加载workSpace中的项目
2010-11-27 12:48 1121在service.xml 文件中添加 一下配置即可,免去了从新 ... -
在项目中发短信的小例子
2010-11-21 15:32 670... -
java中日志的处理
2010-11-13 09:49 722在web.xml文件中配置 log4j <!-- 上下 ... -
java创建解析xml
2010-11-10 07:29 900这几天老是有人问如何用java 生成xml文件,以前自己也看到 ... -
java
2010-11-09 09:26 733public class EncryptUtil { pri ... -
JDBC的数据类型
2010-10-14 15:10 680数值型整型 JDBCtinyint ja ... -
Hibernate 处理Oracle的大对象Clob
2010-10-12 08:20 903Hibernate+Oracle+CLOB的读写其实只要这样做 ... -
Java读取Properties文件
2010-10-11 17:28 660使用J2SEAPI读取Properties文件的六种方法 1 ...
相关推荐
创建一个名为`SendEmail`的子程序,通过创建并配置Outlook对象,设置邮件主题、内容、附件(如刚才捕获的截图)以及收件人地址,实现自动化发送带有测试结果的电子邮件。这在团队协作或者需要远程监控测试情况时特别...
在实际的IT实践中,开发者可能会遇到如邮件验证、防止被识别为垃圾邮件、处理大容量邮件列表等问题。 标签中的“源码”意味着我们将讨论的是实际的编程代码,而“工具”可能指的是用于辅助发送邮件的第三方库或者...
Java发送邮件是一个常见的任务,尤其在企业级应用中,用于通知、报告或者...通过理解并实践该项目,开发者可以掌握Java发送邮件的基本流程,学习如何配置邮件会话、创建和发送邮件,以及处理可能遇到的认证和安全问题。
在配置邮件告警时,可能会遇到SSL安全验证的问题。由于SendEmail默认使用SSL_verify_mode为SSL_VERIFY_NONE可能会造成安全风险,因此推荐将其设置为SSL_VERIFY_PEER,并指定CA证书或CA路径以进行验证。如果确实不...
在使用Qt进行应用程序开发时,有时我们需要集成邮件发送功能,以便用户能够直接通过应用发送电子邮件。在这种场景下,"sendemailapi"是一个可能...如果你在实现过程中遇到问题,与其他开发者交流讨论是很好的解决办法。
在实际应用中,你还需要考虑错误处理和异常捕获,因为邮件发送可能会遇到网络问题、权限问题或者邮件服务器配置问题。`SendJMail.java`工具类可能已经内置了这些错误处理机制,但理解这些潜在问题可以帮助你在出现...
在.NET框架中,WinForms(Windows Forms)是一个用于构建桌面应用程序的用户界面的库。它提供了丰富的控件和功能,让开发者能够创建交互式的...如果你在实际开发中遇到任何问题,可以继续探索相关文档或寻求更多帮助。
- 处理异常:在发送邮件过程中,可能会遇到网络问题或认证失败等问题,需要捕获并处理异常。 - 安全性:如果使用不安全的SMTP服务器,可能面临安全风险,比如用户名和密码被截取。因此,建议使用SSL/TLS加密连接。...
在使用JavaMail过程中,可能会遇到网络问题、认证错误或邮件服务器拒绝连接等问题。因此,需要适当地捕获和处理`MessagingException`和其他相关异常。 8. **实战应用**: 以JSP为例,用户可能通过表单提交邮件...
在实际应用中,网络环境可能会遇到各种各样的问题,因此错误处理和异常管理是不可或缺的一部分。例如,在上述 SMTP 示例中,如果服务器拒绝向某个地址发送邮件(如黑名单中的地址),客户端需要能够识别这种情况并...
在Spring Boot应用中,我们经常会遇到需要集成第三方服务来实现短信和邮件的发送功能,例如阿里云的SmsService和腾讯云的QcloudSmsService等。这些服务可以帮助我们在用户注册、密码找回、订单确认等场景下进行有效...
在实际使用过程中,可能遇到SMTP连接问题或其他错误。SunMailer会抛出异常,你可以捕获这些异常进行处理或记录日志。为了方便调试,可以开启日志模式: ```php 'SunMailer' => [ // ... 'debug' => true, ], ``` ...
- 发送邮件时可能遇到网络问题,因此建议增加异常处理机制。 - 对于大型应用,考虑到性能因素,应考虑使用异步方式发送邮件。 - 在某些情况下,邮件服务商可能会限制频繁发送邮件的行为,请根据实际情况调整发送策略...
在实际编程中,可能会遇到的一些错误和问题,例如在使用smtplib进行邮件发送时,可能会遇到UnicodeDecodeError错误。这通常与计算机名或某些环境变量含有中文字符有关。解决这类问题,通常需要检查代码中涉及的字符...
总结起来,搭建Gerrit代码审查服务主要包括创建专用账户、安装Java、下载安装Gerrit、配置Gerrit及启动服务、配置反向代理等步骤。这个过程可以帮助团队实现更高效、安全的代码审核流程,提升软件开发的质量和效率。