注册 登录
编程论坛 J2EE论坛

发送E-mail

天地乾坤 发布于 2005-11-25 22:29, 1433 次点击

用户注册成功之后,通过邮件方式给用户自动发送一封邮件.
照到书上编了一个代码,运行总是不得行.
请问,是不是一定要自己建一个邮件服务器?
以及这其中还有哪些值得注意(或步骤)的啊?
谢谢!

13 回复
#2
yangwudong2005-11-25 23:51
是不需要自己建立邮件服务器的!用已经现有的就好了,不过要注意设置端口,pop3和smtp的!如果代码不会的话,自己去google上搜!
#3
末代地主2005-11-26 08:43
把你的程序贴出来啊,我已搞JavaMail,大家共同探讨啊
#4
天地乾坤2005-11-26 09:38

谢了!
弄了一个简单的E-mail代码
<%@page import="javax.mail.*,javax.mail.internet.*,javax.activation.*,java.util.*"%>
<html>
<head>
<title>JavaMail Example</title>
</head>
<body>
<%
try{
Properties props=new Properties();
Session sendMailSession;
Transport transport;
sendMailSession=Session.getInstance(props,null);
props.put("mail.smtp.host","localhost");
Message newMessage=new MimeMessage(sendMailSession);
newMessage.setFrom(new InternetAddress(request.getParameter("from")));
newMessage.setRecipient(Message.RecipientType.To,new InternetAddress(request.getParameter("to")));
newMessage.setSubject(request.getParameter("subject"));
newMessage.setSentDate(new Date());
newMessage.setText(request.getParameter("text"));
transport=sendMailSession.getTransport("smtp");
transport.send(newMessage);
%>
<p>Your mail has been sent.</p>
<%
}catch(MessagingException m){
out.println(m.toString());
}
%>
</body>
</html>
/////////////
其中props.put("mail.smtp.host","localhost")该怎样设置啊?

#5
末代地主2005-11-26 09:54


import javax.mail.*;
import javax.activation.*;
import javax.mail.internet.*;
import java.util.Properties;

class EmailAuthenticator extends Authenticator
{
String m_username=null;
String m_userpass=null;
void setUsername(String username)
{m_username=username;
}
void setUserpass(String userpass)
{m_userpass=userpass;
}
EmailAuthenticator(String username,String userpass)
{super();
setUsername(username);
setUserpass(userpass);
}
public PasswordAuthentication getPasswordAuthentication()
{return new PasswordAuthentication(m_username,m_userpass);
}
}

public class newSendMail
{
public static void main(String args[])
{String host="smtp.163.com";
String from="...@163.com";
String to="....@...";
String username="...@163.com"; //同from相同
String password=""; //输入密码
EmailAuthenticator mailAutherticator=new EmailAuthenticator(username,password);
try
{Properties props=System.getProperties();
props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true");

Session session=Session.getInstance(props,(Authenticator)mailAutherticator);
MimeMessage message=new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject("hello,shiming");
message.setText("welcome here");
message.saveChanges();
Transport transport=session.getTransport("smtp");
transport.connect(host,username,password);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
System.out.println("send successful");
}
catch(Exception e){System.out.println("no "+e);}
}
}

#6
末代地主2005-11-26 09:56
老兄,有没搞过Struts,我想学习一下,可不知道怎么配置,我是在Tomcat下开发的
#7
天地乾坤2005-11-26 16:30

做的网站小得很,用不上Struts,也没有学,该天向你请教哈.
你给出的代码不用自己整个html嘛,我编译通过了,直接运行出现了如下错误,
想必你运行成功了的.能帮忙分析一下原因?再次谢了!
HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error instantiating servlet class newSendMail
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:865)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:621)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:163)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)


root cause

java.lang.NoClassDefFoundError: EmailAuthenticator
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:1618)
at java.lang.Class.getConstructor0(Class.java:1930)
at java.lang.Class.newInstance0(Class.java:278)
at java.lang.Class.newInstance(Class.java:261)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:856)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:621)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:163)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)

#8
天地乾坤2005-11-26 16:50
呵呵,这位仁兄,不好意思,再问一下,你这是servlet,还是javabean?
还有其它代码吗?我是边做边学,见笑了.
#9
天地乾坤2005-11-26 17:14
明白代码是怎么回事了,但是运行会出现如下问题:
请问这个问题如何解决??

D:\apache-tomcat-5.5.12\webapps\E-mail\WEB-INF\classes>java newSendMail
no javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com,
port: 25, response: -1
#10
末代地主2005-11-27 15:35
String host="smtp.163.com";
String from="...@163.com";
String to="....@...";
String username="...@163.com"; //同from相同
String password=""; //输入密码
上面这几项你设置完全正确吗?
比如说用户名与密码是否正确?
我那个是写的Java程序,你直接用JC就可以编译运行啊。
不过作相应的转变后用在Jsp里也应该一样了,不过我到没试过。
#11
yangwudong2005-11-30 15:02


package com.e5systems.hr.commons.javamail;

import java.io.*;
import java.util.*;

import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;

/**
* <p>
* Title: MailBean
* </p>
* <p>
* Description: offer send email function(/p>
*
* @version 1.0
*/

class ExtendStrings {
public ExtendStrings() {
}

/**
* trim(String str)
*/
public String CS(String str) {
try {
if (str == null)
return "";
str = str.trim();
if (str == null)
return "";
str = new String(str.getBytes("8859_1"), "GBK");
} catch (Exception e) {
System.out.println(e);
}
return str;
}

}

public class SendEmails {
private String errMsg = "";

private ExtendStrings ExStr = new ExtendStrings();

private String sender = "";// sender

private String smtpHost = "";// send Email server

private String user = ""; // user name

private String password = "";// logon password

private String subject = "";// mail subject

String fileAttachment = "";// attachment

public SendEmails(String user,String password,String sender,String subject,String attachment) {
this.setPropertiesAttri(user,password,sender,subject,attachment);
}

private void setPropertiesAttri(String user,String password,String sender,String subject
,String attachment) {
try {

this.setSmtpHost("smtp.163.com");//(prop.get("SmtpHost").toString());
this.setUser(user);
this.setPassword(password);
this.setSender(sender);
this.setSubject(ExStr.CS(subject));
this.setFileAttachment(attachment.replace('\\','/'));
} catch (Exception ex) {
System.err.println("exception in SendEmail.java:" + ex.toString());
}
}

/** set sender address */

public void setSender(String sender) {
this.sender = sender;
}

public String getSender() {
return sender;
}

/** set send server(smtp) */
public void setSmtpHost(String smtpHost) {
this.smtpHost = smtpHost;
}

public String getSmtpHost() {
return smtpHost;
}

/** set logon user name */
public void setUser(String user) {
this.user = user;
}

public String getUser() {
return user;
}

/** set logon password */
public void setPassword(String password) {
this.password = password;
}

public String getPassword() {
return password;
}

/**set mail subject */
public void setSubject(String subject) {
this.subject = subject;
}

public String getSubject() {
return subject;
}

/**
* use smtp send Email
*
* @throws MessagingException
* mail fail
*/
public void smtp(String receiver, String content) throws MessagingException {
if (smtpHost == null)
throw new MessagingException("smtpHost not found");
if (user == null)
throw new MessagingException("user not found");
if (password == null)
throw new MessagingException("password not found");

Properties properties = new Properties();
properties.put("mail.smtp.host", smtpHost);
properties.put("mail.smtp.auth", "true");

Session session = Session.getDefaultInstance(properties,
new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
});
MimeMessage mimeMsg = new MimeMessage(session);
if (sender != null)
{
mimeMsg.setFrom(new InternetAddress(sender));
}
if (receiver != null)
{
mimeMsg.setRecipients(Message.RecipientType.TO, parse(receiver));
}
if (subject != null)
{
mimeMsg.setSubject(subject, "GBK");
}

MimeBodyPart part = new MimeBodyPart();
part.setText(content == null ? "" : content, "GBK");


part.setContent(content.toString(), "text/html;charset=GBK");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(part);
// Part two is attachment
if (fileAttachment != null && fileAttachment.trim().length() > 1) {
part = new MimeBodyPart();
DataSource source = new FileDataSource(fileAttachment);
part.setDataHandler(new DataHandler(source));
part.setFileName(fileAttachment);
multipart.addBodyPart(part);
}
mimeMsg.setContent(multipart);
mimeMsg.setSentDate(new Date());
Transport.send(mimeMsg);
}

/** split string */
private InternetAddress[] parse(String addressSet) throws AddressException {
ArrayList list = new ArrayList();
StringTokenizer tokens = new StringTokenizer(addressSet, ";");
while (tokens.hasMoreTokens()) {
list.add(new InternetAddress(tokens.nextToken().trim()));
}
InternetAddress[] addressArray = new InternetAddress[list.size()];
list.toArray(addressArray);
return addressArray;
}

/**
* interface
*/

public static boolean sendEmails(String recever, String content,String suject,String attachment) {
String sender="邮箱地址";
String username="用户名";
String password="密码";
if (recever == null || content == null||username==null
||password==null ||sender==null) {
return false;
}
if(attachment==null){
attachment="";
}
if(suject==null){
suject=username;
}

SendEmails sendEmail = new SendEmails(username,password,sender,suject,attachment);
try {
sendEmail.smtp(recever, content);
} catch (Exception ex) {
System.err.println("send Email is faild!" + ex.toString());
}

return true;
}

/**
* @return Returns the fileAttachment.
*/
public String getFileAttachment() {
return fileAttachment;
}
/**
* @param fileAttachment The fileAttachment to set.
*/
public void setFileAttachment(String fileAttachment) {
this.fileAttachment = fileAttachment;
}
}


[此贴子已经被作者于2005-11-30 15:15:51编辑过]

#12
yangwudong2005-11-30 15:04
正在使用的代码,建议大家不要只用jsp,最起码也要用一用servlet吧!如果想学习struts配置的话,请看置顶贴,我马上发!
#13
zhuly2005-12-02 15:03

感谢了朋友们!我是个菜鸟,我是来学习的。

#14
天地乾坤2005-12-03 11:15
多谢斑竹!!
1