出现的异常是javax.mail.AuthenticationFailedException
解决方案 »
- <s:bean>标签使用
- VFS开发时句柄无效
- javax.mail.MessagingException
- MVC中sql server的原始查询
- Struts2标签的select控件,怎么在onchange事件里调用一个Action
- 关于hibernate的联表查询的问题
- 求java编程思想三完整的电子版!还有习题答案!!!!!!!
- spring和EJB在实际用途广吗?
- 一个说容易有多容易,说难有多难的问题
- 有不有谁知道<J2EE模式第二版>出来没有呀,有不有中文的,有谁已经买到了?
- JbuilderX+WebLogic8.1 开发WebServices,请大虾帮忙!
- 50分....求达人帮忙,写出服务器监听8080端口接收客户端信息过程!!!!!!!!!!!!!!!!!
<%request.setCharacterEncoding("gb2312");%><!--中文处理代码--> <!--引入要用到的类库-->
<%@ page import="java.util.*,javax.mail.*"%>
<%@ page import="javax.mail.internet.*"%> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>发送成功</title>
</head> <body>
<%
try{ //从html表单中获取邮件信息
String tto=request.getParameter("to");
String ttitle=request.getParameter("title");
String tcontent=request.getParameter("content"); Properties props=new Properties();//也可用Properties props = System.getProperties(); //System.setProperty("http.proxyHost","192.168.0.1"); //设置代理上网
//System.setProperty("http.proxyPort","80");//设置代理上网端口
//System.setProperty("http.proxyUser","wangh");
//System.setProperty("http.proxyPassword","1234");
//props.put("mail.smtp.host","10.10.1.11");//存储发送邮件服务器的信息 props.put("mail.smtp.host","smtp.21cn.com");//存储发送邮件服务器的信息
props.put("mail.smtp.auth","true");//同时通过验证
Session s=Session.getInstance(props);//根据属性新建一个邮件会话
s.setDebug(true); MimeMessage message=new MimeMessage(s);//由邮件会话新建一个消息对象 //设置邮件
InternetAddress from=new InternetAddress("[email protected]");
message.setFrom(from);//设置发件人
InternetAddress to=new InternetAddress(tto);
message.setRecipient(Message.RecipientType.TO,to);//设置收件人,并设置其接收类型为TO
message.setSubject(ttitle);//设置主题
message.setText(tcontent);//设置信件内容
message.setSentDate(new Date());//设置发信时间 //发送邮件
message.saveChanges();//存储邮件信息
Transport transport=s.getTransport("smtp");
transport.connect("smtp.21cn.com","xxxx","111111");//以smtp方式登录邮箱
transport.sendMessage(message,message.getAllRecipients());//发送邮件,其中第二个参数是所有
//已设好的收件人地址
transport.close(); %>
<div align="center">
<p><font color="#FF6600">发送成功!</font></p>
<p><a href="recmail.jsp">去看看我的信箱</a><br>
<br>
<a href="index.htm">再发一封</a> </p>
</div>
<%
}catch(MessagingException e){
out.println(e.toString());
}
%>
</body>
</html> 你试一下,看看行不行?不过自己还要写个页面传几个参数,要不直接在此页面赋值也行。
老错误!
/**
* <p>Title: 郵件服務</p>
* <p>Description: </p>
* <p>Copyright: qyzj</p>
* <p>Company: </p>
* @author wanghx 2004/08
* @version 1.0
*/import java.net.*;
import java.io.*;
public class SendMail {
private Socket sc;
private int PORT = 25;
private BufferedReader in;
private PrintWriter out;
private String smtpServer;
public void setSmtpServer(String smtpServer) {
this.smtpServer = smtpServer;
}
public boolean createConnect() {
if (smtpServer == null) {
smtpServer = "localhost";
}
try {
sc = new Socket(smtpServer, PORT);
in = new BufferedReader(new InputStreamReader(sc.getInputStream()));
out = new PrintWriter(sc.getOutputStream());
} catch (IOException e) {
return false;
}
return true;
}
public String do_command(String s) throws IOException {
if (s != null) {
out.print(s);
out.flush();
}
String line;
if ((line = in.readLine()) != null) {
return line;
} else {
return "";
}
} public boolean send(String to,String from,String subject,String message){
subject = Base64Encode(subject);
subject = "=?GB2312?B?" + subject + "?=";
message = Base64Encode(message);
try {
String line;
do_command(null);
if (-1 == (line = do_command("HELO " + smtpServer + "\r\n")).indexOf("250")){
return false;
}
if (-1 == (line = do_command("MAIL FROM: " + from + "\r\n")).indexOf("250")){
return false;
}
if (-1 == (line = do_command("RCPT TO: " + to + "\r\n")).indexOf("250")){
return false;
}
if (-1 == (line = do_command("DATA\r\n")).indexOf("354")){
return false;
}
message = "Content-Type: text/html\r\n\r\n" + message;
message = "Subject: " + subject + "\r\n" + message;
message = "To: " + to + "\r\n" + message;
message = "Content-Transfer-Encoding: base64\r\n" + message;
message = "MIME-Version: 1.0\r\n" + message;
message = "From: " + from + "\r\n" + message;
out.print(message + "\r\n"); if (-1 == (line = do_command("\r\n.\r\n")).indexOf("250")){
return false;
}
in.close();
out.close();
sc.close();
} catch (IOException e) {
return false;
}
return true;
}
public boolean send(String to,String from,String subject,String message,String username,String passwd) {
username = Base64Encode(username);
passwd = Base64Encode(passwd);
subject = Base64Encode(subject);
subject = "=?GB2312?B?" + subject + "?=";
message = Base64Encode(message);
try {
String line;
do_command(null);
if (-1 == do_command("EHLO " + smtpServer + "\r\n").indexOf("250")) return false;
while (true) {
if (-1 != in.readLine().indexOf("250 ")){
break;
}
}
if (-1 == do_command("AUTH LOGIN\r\n").indexOf("334")){
return false;
}
if (-1 == do_command(username + "\r\n").indexOf("334")){
return false;
}
if (-1 == do_command(passwd + "\r\n").indexOf("235")){
return false;
}
if (-1 == do_command("MAIL FROM: " + from + "\r\n").indexOf("250")){
return false;
}
if (-1 == do_command("RCPT TO: " + to + "\r\n").indexOf("250")){
return false;
}
if (-1 == do_command("DATA\r\n").indexOf("354")){
return false;
}
message = "Content-Type: text/html\r\n\r\n" + message;
message = "Subject: " + subject + "\r\n" + message;
message = "To: " + to + "\r\n" + message;
message = "Content-Transfer-Encoding: base64\r\n" + message;
message = "MIME-Version: 1.0\r\n" + message;
message = "From: " + from + "\r\n" + message;
out.print(message + "\r\n");
if (-1 == do_command("\r\n.\r\n").indexOf("250")){
return false;
}
in.close();
out.close();
sc.close();
} catch (IOException e) {
return false;
}
return true;
}
public static String Base64Encode(String s) {
if (s == null || s.length() == 0) return "";
String EncodingTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
byte[] Buffer = s.getBytes();
int ReadNow, i, res;
char[] WriteBuf = new char[4];
char[] Buf = new char[3];
String EncodedStr = "";
int ReadIndex = 0;
int Len = Buffer.length;
boolean isEnd;
int BytesWritten = 0;
ReadNow = 0;
do {
isEnd = false;
for (i = 0; i < 3; i++) {
if (ReadIndex >= Len) {
isEnd = true;
ReadNow = i;
break;
}
Buf[i] = (char) (((byte)Buffer[ReadIndex]) & 0x00FF);
ReadIndex = ReadIndex + 1;
}
if (isEnd) break;
WriteBuf[0] = EncodingTable.charAt((Buf[0] >> 2) & 0x003F);
WriteBuf[1] = EncodingTable.charAt(((Buf[0] & 3) << 4 | (Buf[1] >> 4)) & 0x003F);
WriteBuf[2] = EncodingTable.charAt(((Buf[1] & 15) << 2 | (Buf[2] >> 6)) & 0x003F);
WriteBuf[3] = EncodingTable.charAt((Buf[2] & 63) & 0x003F);
for (i = 0; i < 4; i++)
EncodedStr = EncodedStr + WriteBuf[i];
BytesWritten = BytesWritten + 4;
if ((BytesWritten % 76) == 0) {
EncodedStr = EncodedStr + "\r\n";
}
}
while (ReadNow != 3);
if (ReadNow < 3) {
switch (ReadNow) {
case 1 :
WriteBuf[0] = EncodingTable.charAt((Buf[0] >> 2) & 0x003F);
WriteBuf[1] = EncodingTable.charAt(((Buf[0] & 3) << 4) & 0x003F);
WriteBuf[2] = '=';
WriteBuf[3] = '=';
for (i = 0; i < 4; i++){
EncodedStr = EncodedStr + WriteBuf[i];
}
break;
case 2 :
WriteBuf[0] = EncodingTable.charAt((Buf[0] >> 2) & 0x003F);
WriteBuf[1] = EncodingTable.charAt(((Buf[0] & 3) << 4 | (Buf[1] >> 4)) & 0x003F);
WriteBuf[2] = EncodingTable.charAt(((Buf[1] & 15) << 2) & 0x003F);
WriteBuf[3] = '=';
for (i = 0; i < 4; i++){
EncodedStr = EncodedStr + WriteBuf[i];
}
break;
default : break;
}
}
return (EncodedStr);
}
public static void main(String[] args) {
SendMail sm = new SendMail();
sm.setSmtpServer("192.168.1.1");
if (sm.createConnect()) {
String to = "[email protected]";
String from = "[email protected]";
String subject = "魔鬼";
String message = "我要吃了你!";
String user = "123";
String pw = "123";
//System.out.print(sm.send(to, from, subject, message) + "\n");
System.out.print(sm.send(to,from,subject,message,user,pw));
} else {
System.out.println("爲何連接不上SMTP服務器\u554A?\r\n");
return;
}
}
}测试没有问题....不知对楼主有没有帮助......
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.mail.*"%>
<%@ page import="javax.mail.internet.*"%>
<%@ page import="javax.activation.*"%>
<html>
<head>
<title>sendmail.jsp</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
//邮件服务器的IP地址,注意此时使用的是SMTP 邮件服务器
//String host="202.102.240.76";
//获取用户信息
String to=request.getParameter("to");
String from=request.getParameter("from");
String cc=request.getParameter("cc");
String bcc=request.getParameter("bcc");
//结合本程序的第一句,共同起显示汉字体的功能
String subject=request.getParameter("subject");
subject = new java.lang.String(subject.getBytes("iso-8859-1"));
//以上方法等同于以下两句,原理相同
//byte[] subjectTemp=request.getParameter("subject").getBytes("ISO8859_1");
//String subject=new String(subjectTemp);
byte[] messageTextTemp=request.getParameter("body").getBytes("ISO8859_1");
String messageText= new String(messageTextTemp);
boolean sessionDebug = false;
//验证所填写的邮件是否正确
if((to.trim().indexOf("@")==-1)||(to.trim().length()<5)){
%>
<jsp:forward page="err.jsp"/>
<%
}
if((from.trim().indexOf("@")==-1)||(from.trim().length()<5)){
%>
<jsp:forward page="err.jsp"/>
<%
}
//获得系统属性对象,用下两句的任一句均可
//Properties props = System.getProperties();
Properties props=new Properties();
Session mailSession;
Transport transport; //设置SMTP主机
//以下一句是对任意的SMTP 邮件服务器均可,并且有了这一句,将不用设置传输协议了
props.put("mail.smtp.host", "smtp.163.com");
props.put("mail.smtp.auth","true"); //这样将确定接收方的邮件服务器主机,
//props.put("mail.host",host);
//设置邮件传输协议方式
//props.put("mail.transport.protocol","smtp");
//获取邮件会话对象
mailSession = Session.getInstance(props, null);
mailSession.setDebug(true);; try{
//创建MIME邮件对象
Message msg = new MimeMessage(mailSession);
//设置发信人
msg.setFrom(new InternetAddress(from));
//设置收信人
InternetAddress[] addressTo = {new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO,addressTo);
//设置抄送人
if(cc.trim().length()!=0){
InternetAddress[] addressCc = {new InternetAddress(cc)};
msg.setRecipients(Message.RecipientType.CC,addressCc);
}
//设置暗送人
if(bcc.trim().length()!=0){
InternetAddress[] addressBcc = {new InternetAddress(bcc)};
msg.setRecipients(Message.RecipientType.BCC,addressBcc);
}
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setText(messageText); //发送邮件
transport = mailSession.getTransport("smtp");
transport.connect("smtp.163.com","xxx","xxx");
transport.sendMessage(msg,msg.getAllRecipients());
transport.close();
out.print("kk");
}
catch(Exception ex){
out.println("sending failed!");
}
%></body>
</html>我成功发送了。。你看看吧
改为transport.sendMessage(newMessage,newMessage.getAllRecipients());
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;public class SendMail {
public SendMail() {
} private String smtphost; //SMTP转发服务器
private String smtpuser; //SMTP转发用户名
private String smtppassword; //SMTP转发的用户密码
private String from; //发件人
private String to; //收件人
private String subject; //邮件标题
private String body; //邮件内容
private String bodystyle = "text/plain;charset=gb2312"; //邮件内容的格式
private String filename; //附件的文件名;
private Vector file = new Vector(); //用于保存发送附件的文件名的集合 //用于返回邮件SMTP转发服务器
public String getSmtphost() {
return smtphost;
} //用于设置邮件SMTP转发服务器
public void setSmtphost(String inString) {
smtphost = inString;
} //用于返回邮件SMTP转发的用户名
public String getSmtpuser() {
return smtpuser;
} //用于设置邮件SMTP转发的用户名
public void setSmtpuser(String inString) {
smtpuser = inString;
} //用于返回邮件SMTP转发的用户密码
public String getSmtppassword() {
return smtppassword;
} //用于设置邮件SMTP转发的用户密码
public void setSmtppassword(String inString) {
smtppassword = inString;
} //用于返回邮件发件人
public String getFrom() {
return from;
} //用于设置邮件发件人
public void setFrom(String inString) {
from = inString;
} //用于返回邮件收件人
public String getTo() {
return to;
} //用于设置邮件收件人
public void setTo(String inString) {
to = inString;
} //用于返回邮件标题
public String getSubject() {
return subject;
} //用于设置邮件标题
public void setSubject(String inString) {
subject = inString;
} //用于返回邮件内容
public String getBody() {
return body;
} //用于设置邮件内容
public void setBody(String inString) {
body = inString;
} //用于设置邮件格式
public void setBodyStyle(String inString) {
bodystyle = inString;
} //用于收集附件名
public void attachfile(String fname) {
file.addElement(fname);
} //用于邮件发送返回结果
public boolean send() {
boolean result; if (smtphost == "" || smtphost == null) {
System.out.println("邮件SMTP转发服务器未定义");
return false;
}
if (from == "" || from == null) {
System.out.println("邮件发送方未定义");
return false;
}
if (to == "" || to == null) {
System.out.println("邮件接收方未定义");
return false;
}
if (subject == "" || subject == null) {
System.out.println("邮件标题未定义");
return false;
} Properties props = System.getProperties();
if (smtpuser == "" || smtpuser == null || smtppassword == "" ||
smtppassword == null) {
props.put("mail.smtp.host", smtphost);
}
else {
props.put("mail.smtp.auth", "true");
}
Session session = Session.getInstance(props, null);
try {
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = {
new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(to));
msg.setSubject(subject); Multipart mp = new MimeMultipart(); //后面的BodyPart将加入到此处创建的Multipart中 Enumeration efile = file.elements(); //利用枚举器方便的遍历集合
while (efile.hasMoreElements()) {
MimeBodyPart mbp = new MimeBodyPart();
filename = efile.nextElement().toString(); //选择出每一个附件名
FileDataSource fds = new FileDataSource(filename); //得到数据源
mbp.setDataHandler(new DataHandler(fds)); //得到附件本身并置入BodyPart mbp.setFileName(fds.getName()); //得到文件名同样置入BodyPart
mp.addBodyPart(mbp);
}
file.removeAllElements(); //移走集合中的所有元素
MimeBodyPart mbp_body = new MimeBodyPart();
mbp_body.setContent(body, bodystyle); //加入邮件正文
mp.addBodyPart(mbp_body);
msg.setContent(mp); //Multipart加入到邮件
msg.setSentDate(new Date()); //设置信件头的发送时间 if (smtpuser == "" || smtpuser == null || smtppassword == "" ||
smtppassword == null) {
Transport.send(msg); //发送邮件
}
else {
Transport trans = session.getTransport("smtp");
trans.connect(smtphost, smtpuser, smtppassword);
trans.sendMessage(msg, msg.getAllRecipients()); //发送邮件
trans.close();
}
result = true;
}
catch (MessagingException mex) {
mex.printStackTrace();
Exception ex = null;
if ( (ex = mex.getNextException()) != null) {
ex.printStackTrace();
}
result = false;
}
return result;
} public static void main(String[] args) throws InterruptedException {
SendMail mymail = new SendMail();
mymail.setSmtphost("邮件服务器");
mymail.setSmtpuser("帐号");
mymail.setSmtppassword("密码");
mymail.setFrom("我的信箱");
mymail.setTo("对方信箱");
mymail.setSubject("标题");
mymail.setBody("正文");
mymail.setBodyStyle("text/plain;charset=gb2312");
mymail.attachfile("附件");
mymail.send();
}
}
}
你是不是用到:activation.jar
还有一个问题,
props.put("mail.smtp.host", "smtp.163.com");
以上这句批定了用163.com的smtp服务器,那么是不是要这样的局限:
邮件的发送方必须是[email protected],
有这个疑问是因为我试了一下,如果用其他发送地址如[email protected]就不能发送,
请大家赐教!!!