JSP+Jmail+JavaBean 发邮件(转)2010-08-23 18:052007年04月14日 14:32/*
* SendMail.java
*
* Created on 2007年3月31日, 下午10:39
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
/*
* SendMail.java
*
* Created on 2007年2月27日, 下午2:16
*
* To change this template, choose Tools | Template Manager
复读生能考军校吗* and open the template in the editor.
*/
package test;
/**
*
* @author Administrator
*/
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
st.MyAuthenticator;
public class SendMail {
public static void main (String args[]) throws Exception {
}
public void send(String to,String subject,String content) throws Exception{
String host = "smtp.163"; //发件人使用发邮件的服务器
String from = "帐号@163"; //发邮件的出发地(发件人的信箱)
//String to = "litianyi520@163"; //发邮件的目的地(收件人信箱)
// 得到系统properties
Properties props = Properties();
// 设置邮件服务器
props.put("mail.smtp.host", host);
// 取得session
props.put("mail.smtp.auth", "true"); //这样才能通过验证
MyAuthenticator myauth = new MyAuthenticator("帐号", "密码");
Session session = DefaultInstance(props, myauth);
// session.setDebug(true);
// 定义message
MimeMessage message = new MimeMessage(session);
// 设定发送邮件的地址
message.setFrom(new InternetAddress(from));
// 设定接受邮件的地址
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// 设定邮件主题
message.setSubject(subject);
// 设定邮件内容
BodyPart mdp=new MimeBodyPart();//新建一个存放信件内容的BodyPart对象
mdp.setContent(content,"text/html;charset=gb2312");//给BodyPart对象设置内容和格式/编码方式
Multipart mm=new MimeMultipart();//新建一个MimeMultipart对象用来存放BodyPart对
//象(事实上可以存放多个)
mm.addBodyPart(mdp);//将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
message.setContent(mm);//把mm作为消息对象的内容
// message.setText(content);
message.saveChanges();
Transport.send(message);
}
}
/*
* MyAuthenticator.java
*
* Created on 2006年12月15日, 下午4:30
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package test;
/**
*
* @author Administrator
*/
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);
}
}
test.jsp
<%@ page
language="java"
contentType="text/html;charset=gb2312"
import = "java.util.*"
import = "*"
import = "java.io.*"
%>
<jsp:useBean id="mail" scope="request" class="test.SendMail"/>
<%
String Parameter("username");
String sub="题目";
String tcontent="<a href='#'>内容</a>";
mail.send(username,sub,tcontent);
%>
[转]Java Mail 邮件类(2009-11-29 00:47:57)
转载标签: it 分类: Java
用到javax.mail 的几个jar文件
将 JBuilder2006\thirdparty\jakarta-tomcat-4.1.31\common\lib 下的 activation.jar 和mail.jar 复制到你的项目lib目录中
如果mail.jar不存在,将会出现下面的错误:java.lang.NoClassDefFoundError: javax/mail/Message
如果activation.jar不存在,则:java.lang.NoClassDefFoundError: javax/activation/DataSource
源文件:MailSend.java
package youpackage;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class MailSend {
public boolean sendMail(String mailTo, String mailSubject, String mailBody) {
// 发送email
try {
// default account information
String smtpServer = "smtp.domain"; //smtp服务器地址
String From = "from@mail"; //来源的mail
String Subject = mailSubject;
String Text = mailBody;
Properties props = Properties();
props.put("mail.smtp.host", smtpServer);
System.out.println("正在创建");
Session sendMailSession = DefaultInstance(props);
罗志祥回应分手传闻//sendMailSession.setDebug(true);
System.out.println("正在创建");
Message newMessage = new MimeMessage(sendMailSession);
newMessage.setFrom(new InternetAddress(From));
newMessage.setRecipient(Message.RecipientType.TO,
new InternetAddress(mailTo));
newMessage.setSubject(Subject);
newMessage.setSentDate(new Date());
newMessage.setText(Text);
newMessage.saveChanges();
System.out.println("正在联接");
Transport transport = Transport("smtp");
System.out.println("正在发送......");
transport.sendMessage(newMessage, AllRecipients());
System.out.println("发送成功......");
transport.close();
} catch (Exception mailEx) {
return false;
}
return true;
}
public static void main(String[] args) {
MailSend send = new MailSend();
李白怎么玩send.sendMail("test@test", "测试标题", "测试内容");
}
}
错误1:
Send Mail Error:Invalid
Addresses;
nested exception is:
class javax.mail.SendFailedException: 553 sorry, your don't authenticate or the domain isn't in my list of allowed rcpthosts(#5.7.1)
如果出现上面的错误,是由于SMTP邮件服务器启用了发信认证,所以在外部地址发信是不行的,解决方法只能换个邮件服务器或用自己的设置。
错误2:
Send Mail Error:Invalid Addresses;
nested exception is:
class javax.mail.SendFailedException: 554 <xiaohua-wxh@163>: Recipient address rejected: Relay access denied #1-062
“传递被拒绝的”错误
说明:用户接受下列错误当设法发送时:
javax.mail.SendFailedException : 550 5.7.1 <name@company>… 被拒绝的传递
许多smtp服务器使用某类保护兜售信息。 这只准许委托用户或计算机通过服务器发送。
原因:
可能的原因:
火炬之光2 法师加点1) SMTP服务器不准许传递除非您从委托的IP发送也不使用适当的认证。
2) Microsoft Exchange Server : 服务器被设置阻拦smtp传递。
3)有些服务器允许您内部发送但不到外部。
4)一些台SMTP服务器要求用户一次登录和检查他们的POP3atleast在特定IP在他们让之前用户从该IP发送SMTP邮件。一旦POP3使用一有效用户/pwd被检查,计算机IP在服务器自动地然后添加到一个安全的列表。这是另一个方式防止发送同样的消息到多个新闻组。
5)当某一&其邮件服务器在一个黑名单放置为继电器发送同样的消息到多个新闻组时,被拒绝的传递是SMTP服务器使用的一项公用安全措施
违反。 因为某人打破了并且使用他们的服务器传递发送同样的消息到多个新闻组,许多诚实的邮件服务器获得放置此列表。有多种黑名单可用并且SMTP服务器可能预订对无,一些或者许多这些列表。因此您可以能发送到一个被列入黑名单的地址通过一台SMTP服务器但不通过另一台。
可能解决方案:
1. 确定与您的管理员您的服务器被设置允许传递从委托的局部内部IP地址的smtp。营养师就业前景
2. 切记您的计算机IP地址在委托的客户机列表在服务器。
3. 仅当您一次登录并且检查atleast从一个特定IP地址,一些服务器可能允许传递。在这种情况下,您能首先在发送SMTP之前检查您的POP3从一台新的计算机。
4. 一些服务器允许smtp传递仅当您在最后1时数/日之内等等在这种情况下登录并且检查,您应该使用pop3认证方法发送。
5. 有些服务器要求您在发送之前证实。 在这种情况下,使用smtp或Java认证方法。
6. 微软替换: 为被证实的用户切记配置您的替换服
务器允许传递或者为委托的IP addreses的smtp,或者。
7. 切记您的管理员配置您的IP地址/帐户发送内部和外部。
·levitian假设您已经作好了会员系统,接下来准备作“回密码”功能但还没有作,或者您不知道怎么作
这个功能,那么刚好可以看看本教程。
·国内大多数服务器都支持Jmail邮件组件,因而levitian就使用该组件实现邮件发送功能;
·传统的“回密码”功能要使用“密码取回问题”和“密码取回答案”等字段,但levitian认为大可不必这么繁琐,反正最终目的是将密码发进用户的邮箱里,而用户的邮箱只有自己可以收发邮件,那么以上这两个字段就可以省略了。实际上只要填上用户名和自己的邮箱,按“回密码”,启动Jmail邮件组件把密码发至用户邮箱--就这么简单!
·levitian用的是Dreamweaver MX,您用Dreamweaver UltraDev当然也没问题了。
·本系统主要用到了DW服务器行为中的“登录用户”和“插入”菜单中的“文件头标签”中的“刷新”子功能。用户不知道登录密码没关系,他可以用自己的用户名和邮箱回密码,但如果该用户的邮箱是假的(胡填的),或根本没有在自己的注册资料中填邮箱,或者他输入了别人的邮箱,那么他也就无法进入回密码的页面,当然也就无法回自己的密码了~
●步骤一:制作相关的ASP页面
我们需要增加三个页面,一个页面是“回密码登录页面”,这里我命名为getbackpass.asp;另一个是“密码发送成功报告页面”,这里我命名为getbackpassok.asp;第三个页面为邮箱不存在或用户名不
正确时显示错误信息的页面,这里我命名为getbackpassfail.asp。
●步骤二:在会员登录页面增加“回密码”文本型链接或图片型链接
在会员登录界面中输入文本“回密码”或者插入一张图片,将其链接至回密码登录页面getbackpass.asp;如果您想把“回密码”链接放在其它页面,当然没问题了。
●步骤三:制作回密码登录页面getbackpass.asp
·打开回密码登录页面getbackpass.asp,建立表单域,插入两个文本域,第一个命名为MemberName,第二个命名为MemberEmail(您的会员信息数据表中的会员姓名字段和会员邮箱字段如不是MemberName和MemberEmail,请修改成相应的字段名),接下来插入一个“按钮”,命名为“取回密码”。
·打开服务器行为面板,点击“+”,选择“用户身份验证”中的“登录用户”,在“登录用户”面板中,我主要说说以下项目的设置:
使用连接验证:我们选择已经定义好的DSN连接
表格:我们选择会员注册信息表单
用户名列:我们选择MemberName
密码列:我们选
择MemberEmail
如果登录成功转到:我们选择getbackpassok.asp
如果登录失败转到:我们选择getbackpassfail.asp
基于以下项限制访问:我们选择“用户名和密码”
OK!可以按“确定”按钮了。
·加入表单验证代码
为防止用户不填表单就登录,可加入以下代码,让用户必须填写内容:
将DW切换到源代码视图,首先,将以下代码加入<head> </head>之间:
<script language="Javascript">
<!--
function checkdata() {
if (document.form1.MemberName.value=="") {
window.alert ("请输入用户名 !")
return false
}
if (document.form1.MemberEmail.value=="") {
window.alert ("请输入您的邮箱 !")
return false
}
return true
}
//-->
</script>
接下来,在<form>标签里插入以下代码:
这样,表单验证就作好了。
●步骤四:制作密码发送成功报告页面getbackpassok.asp
·打开密码发送成功报告页面getbackpassok.asp,输入文本“密码已发至您的邮箱中,请查询密码后登录本站!”
·建立数据集member,您当然可以用其它的数据集名称:
连接:一栏选择您定义的DSN连接
表格:一栏选择会员信息数据表member
列:一栏选定会员ID、用户名、密码和邮箱这四个字段
筛选:MemberName=阶段变量MM_Username
排序:不用填
至此,数据集就建立好了。在筛选里,我们之所以用阶段变量(Session Variable),是因为我们需要筛选出回密码的用户。使用DW服务器行为的“登录用户”行为以后,登录者的名称(数据库中的MemberName字段)就自动保存在名为MM_Username的Session变量中。这们使用“MemberName=阶段变量MM_Username”作为筛选条件,自然可以筛选出想回密码的用户了。
·接下来我们加入Jmail邮件发送代码。将Dreamweaver设计界面切换到显示代码视图,见如下代码:
<%
Dim member__MMColParam
member__MMColParam = "1"
If (Session("MM_Username") <> "") Then
member__MMColParam = Session("MM_Username")
End If
%>
<%
set member = Server.CreateObject("ADODB.Recordset")
member.ActiveConnection = MM_spsguavaskirtdate_STRING
member.Source = "SELECT MemberID, MemberName, Password, MemberEmail FROM Member WHERE MemberName = '" + Replace(member__MMColParam, "'", "''") + "'"
member.CursorType = 0
member.CursorLocation = 2
member.LockType = 3
member.Open()
member_numRows = 0
%>
这是数据集形成的代码,然后在倒数第二行,即%>上一行,插入以下Jmail组件代码:
世界电影票房排行榜Set JMail = Server.CreateObject("JMail.SMTPMail")
JMail.ServerAddress = "aichina:25"
JMail.Sender = "emai@emaichina"
JMail.Subject = "您的登录密码"
JMail.AddRecipient(member.Fields.Item("MemberEmail").Value)
JMail.Body = "尊敬的用户您好,首先感谢您使用我们的服务!." & vbCrLf & vbCrLf
JMail.Body = JMail.Body & "您的用户名是:" &(member.Fields.Item("Me
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论