javamail不能發送郵件,出現No provider for stmp錯誤,為什麼
Bean代碼如下:
package mail;
import java.util.* ;
import java.io.* ;
import javax.mail.* ;
import javax.mail.internet.* ;
import javax.activation.* ;
public class sendmail {
String vto=""; //收件人
String vfrom="";//寄件人
String vhost=""; //smtp主機
String vfilename=""; //當前附件文件名
String vsubject=""; //主題
String vcc=""; //抄送
String vbcc=""; //暗送
String vbodycont=""; //郵件正文
String vuser=""; //用戶
String vpwd=""; //口令
Vector vfile = new Vector();//用於保存發送附件的檔案名的集合
public sendmail(){
this.vhost="smtp.xxx.com";
}
public sendmail(String szHost){
this.vhost=szHost;
}
public void SetSMTP(String szHost){//SMTP服務器
this.vhost=szHost;
}
public void SetFrom (String szFrom){//發信者
this.vfrom =szFrom;
}
public void SetTo(String szTo){ //收件人
this.vto=szTo;
}
public void SetCC(String szCC){ //抄送
this.vcc=szCC;
}
public void SetBCC(String szBcc){ //暗送
this.vbcc=szBcc;
}
public void SetSubject(String szSubject){ //主題
this.vsubject =szSubject;
}
public void SetContent(String szContent){ //內容
this.vbodycont =szContent;
}
//該方法用於收集附件名
public void attachfile(String fname){ //附件名
vfile.addElement(fname);
}
public void SetUserPwd(String szUser,String szPwd){ //設置用戶及口令
this.vuser =szUser;
this.vpwd=szPwd;
}
//開始發送信件的方法
public boolean startSend(){
Properties props = System.getProperties();//創建Properties對象
props.put("mail.smtp.host", this.vhost);//設置SMTP主機
props.put("mail.smtp.auth","true"); //stmp認證
Session session=Session.getDefaultInstance(props, null);//得到默認的郵件會話對象
try {
//javax.mail.internet.MimeMessage
MimeMessage msg = new MimeMessage(session);//創建Mime郵件對象,並初始化該消息的各項元素
msg.setFrom(new InternetAddress(vfrom)); //javax.mail.internet.InternetAddress
InternetAddress[] to_addr={new InternetAddress(vto)};
msg.setRecipients(Message.RecipientType.TO,to_addr);
if (vcc!=null && vcc.equals("")==false){
InternetAddress[] cc_addr={new InternetAddress(vcc)};
msg.setRecipients(Message.RecipientType.CC,cc_addr);
}
if(vbcc!=null && vbcc.equals("")==false){
InternetAddress[] bcc_addr={new InternetAddress(vbcc)};
msg.setRecipients(Message.RecipientType.BCC,bcc_addr);
}
msg.setSubject(vsubject); //郵件主題
//後面的BodyPart將加入到此處創建的Multipart中
Multipart mp = new MimeMultipart();//javax.mail.Multipart
BodyPart textBodyPart = new MimeBodyPart(); //增加郵件的正文內容
textBodyPart.setText(vbodycont);
mp.addBodyPart(textBodyPart);
//處理附件//java.util.Enumeration
Enumeration efile=vfile.elements();//利用枚舉器方便的遍曆集合
while(efile.hasMoreElements()){//檢查序列中是否還有更多的對象
MimeBodyPart mbp=new MimeBodyPart(); //javax.mail.internet.MimeBodyPart
vfilename=efile.nextElement().toString();//選擇出每一個附件名
FileDataSource fds=new FileDataSource(vfilename);//得到資料源
mbp.setDataHandler(new DataHandler(fds));//得到附件本身並至入BodyPart
mbp.setFileName(fds.getName());//得到檔案名同樣至入BodyPart
mp.addBodyPart(mbp);
}
vfile.removeAllElements();//移走集合中的所有元素
msg.setContent(mp);//Multipart加入到信件
msg.setSentDate(new Date());//設置信件頭的發送日期
//開始發送信件
Transport trs=session.getTransport("stmp");
trs.connect(this.vhost,this.vuser,this.vpwd);
trs.send(msg);
trs.close();
}
catch (MessagingException mex) {
mex.printStackTrace();
Exception ex = null;
if ((ex=mex.getNextException())!=null){
ex.printStackTrace();
}
return false;
}
return true;
}
}
發送的JSP代碼:
<%@ page contentType="text/html;charset=big5" language="java"%>
<jsp:useBean id="wmail" scope="page" class="mail.sendmail"/>
<%!
public String getStr(String str)
{
try{
String temp_p=str;
byte[] temp_t=temp_p.getBytes("ISO8859-1");
String temp=new String(temp_t);
return temp;
}
catch(Exception e){ e.printStackTrace();}
return "";
}
%>
<%
String szTo=request.getParameter("to"); //收件人地址
String szCC=request.getParameter("cc"); //抄送
String szBcc=request.getParameter("bcc"); //暗送
String szSubject=getStr(request.getParameter("subject")); //主題
String szContent=getStr(request.getParameter("content")); //郵件正文
wmail.SetSMTP("smtp.21cn.com"); //SMTP主機
String szFrom="user@21cn.com";
wmail.SetFrom(szFrom); //發件人地址
wmail.SetUserPwd("user","pwd");
wmail.SetTo(szTo); //收件者
if(szCC!=null && szCC.equals("")==false) wmail.SetCC(szCC); //抄送
if(szBcc!=null && szBcc.equals("")==false) wmail.SetBCC(szBcc);//暗送
wmail.SetSubject(szSubject); //主題
wmail.SetContent(szContent); //內容
//增加附件名單
wmail.attachfile("D:\附件1.zip");
wmail.attachfile("D:\附件2.zip");
wmail.attachfile("D:\附件3.zip");
wmail.attachfile("D:\附件4.zip");
wmail.attachfile("D:\附件5.zip");
.....更多附件.....
boolean bsend=wmail.startSend(); //開始發送郵件
if(bsend)
out.println("郵件發送成功");
else
out.println("郵件發送失敗");
%>
為什麼不能發送郵件?
通過後臺,發現如下錯誤:
javax.mail.NoSuchProviderException: No provider for stmp
at javax.mail.Session.getProvider(Session.java:289)
at javax.mail.Session.getTransport(Session.java:483
at javax.mail.Session.getTransport(Session.java:464
at mail.sendmail.startSend(sendmail.java:120)