求教关于JAVAMAIL发邮件的问题~100分

cityroom 2002-12-26 07:05:55
我初学JSP,对javaMail发邮件没有研究~

但我又急用,想速成,希望大家帮忙:)

高分相送~
...全文
119 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
doskeym 2003-03-24
  • 打赏
  • 举报
回复
给你一个发邮件的例子,分析以下,就会有结果的

package bag.mail;
import java.util.*;
import javax.mail.*;
import java.io.*;
import javax.mail.internet.*;
import javax.activation.*;

public class Email {
protected String to = null;
protected String subject = "Email Test";
protected String body = null;

public Email() {
super();
}

public void setTo(String to) {
this.to = to;
}

public void setBody(String body) {
this.body = body;
}

public void sendmail() {
try
{
String host = "smtp.163.net";
String from = "your name";
String to = "other email address";
String username = "your username";
String password = "your password";
this.body = "This is a test";

SmtpAuth sa=new SmtpAuth();
sa.getuserinfo(username,password);
Session session;
MimeMessage message;
Properties props = System.getProperties();
props.put("mail.smtp.auth","true");
props.put("mail.smtp.host", host);
session = Session.getInstance(props, sa);
session.setDebug(true);
message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(subject);
MimeBodyPart mbp = new MimeBodyPart();
mbp.setText(body);
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp);
message.setContent(mp);
message.setSentDate(new java.util.Date());
Transport transport = session.getTransport("smtp");
transport.connect("smtp.163.net",username,password);
transport.send(message);
}
catch (MessagingException e) {
System.out.println("error" + e.getMessage());
}
}

class SmtpAuth extends javax.mail.Authenticator {
private String user,password;
public void getuserinfo(String getuser,String getpassword){
user=getuser;
password=getpassword;
}
protected javax.mail.PasswordAuthentication getPasswordAuthentication(){
return new javax.mail.PasswordAuthentication(user,password);
}
}
}
cityroom 2003-03-21
  • 打赏
  • 举报
回复
这个问题没有人解决吗?
我说的是出现乱码的问题:(
swingcoder 2003-03-17
  • 打赏
  • 举报
回复
没有用户认证功能的发件程序几乎在如今这年代已没什么作用了,除非你自建一个让大家都来发垃圾的SMTP,嘿嘿.

cityroom 2003-03-17
  • 打赏
  • 举报
回复
我用这个

<%@ page import="java.util.*, javax.mail.*, javax.mail.internet.*" %>
<%
Properties props = new Properties();
props.put("mail.smtp.host", "你的SMTP服务器");
Session s = Session.getInstance(props,null);

MimeMessage message = new MimeMessage(s);

InternetAddress from = new InternetAddress("发件人邮件地址");
message.setFrom(from);
InternetAddress to = new InternetAddress("收件人邮件地址");
message.addRecipient(Message.RecipientType.TO, to);

message.setSubject("Test from JavaMail.");
message.setText("Hello from JavaMail!");

Transport.send(message);
%>

我发的信,怎么标题好象是繁体,内容里的汉字都是乱码~~

?????:(
cityroom 2003-03-01
  • 打赏
  • 举报
回复
不是吧,你发了嘛?

ebaroom@ebaroom.cxc.cc
davisye 2003-02-26
  • 打赏
  • 举报
回复
谢谢 ! davisye@163.com
cityroom 2003-01-05
  • 打赏
  • 举报
回复
cityroom2001@yahoo.com.cn
:)
KevinChu 2003-01-05
  • 打赏
  • 举报
回复
还有我,谢谢!
im330@vip.sina.com
langlang_2000 2003-01-05
  • 打赏
  • 举报
回复
lazycalm(lazycalm)
我也来一份吧!谢谢了!!
langlang_2000@msn.com
北极海hein 2003-01-05
  • 打赏
  • 举报
回复
我也来一份吧,xhy818@163.com
junyh 2003-01-01
  • 打赏
  • 举报
回复
JunYh@21cn.com
谢谢了
schuyler 2003-01-01
  • 打赏
  • 举报
回复
kssq@yeah.net
给我来一份,谢谢了
szkxy 2002-12-30
  • 打赏
  • 举报
回复
我有一个正在使用的JavaBean,要的话,我可以发给你
//**********SendMail.java****************//
//Purpose: Send HTML or Text Mail
//function: setFrom(String from)---From mail address, e.g. anyone@21cn.com
// setUser(String user)---Account of sender, e.g. anyone
// sSetPassword(String password)----Password of sender
// setsmtpServer(String smtp)----SMTP mail Server
// setReply(String reply)----Recipient mail
// setSubject(String subject)-----Mail subject
// setContent(String content)-----Mail content
// setAuthentic(String authentic)----whether needs authentic
// setFileName(String filename)----Attached file
.....
maxpain 2002-12-30
  • 打赏
  • 举报
回复
// 得到当前信件的编号
public int getMessageNumber() {
return currentMessage.getMessageNumber();
}

// 得到当前信件发送时间,转为字符串格式
public String getMessageSentDate() throws MessagingException {
Date sentDate = currentMessage.getSentDate();

if (sentDate != null) {
return sentDate.toString();
} else {
return "Date unknown";
}
}

// 得到信件的发送地址和回复地址。
public String getMessageFrom() throws MessagingException {
Address[] addresses = currentMessage.getFrom();

if (addresses == null) {
addresses = currentMessage.getReplyTo();

}
if (addresses.length > 0) {
return addresses[0].toString();

}
return "";
}

// 得到信件的回复地址。在地址数组中的第一个地址。
public String getMessageReplyTo() throws MessagingException {
Address[] addresses = currentMessage.getReplyTo();

if (addresses.length > 0) {
return addresses[0].toString();

}
return "";
}


public String getMessageTo() throws MessagingException {
Address[] addresses =
currentMessage.getRecipients(Message.RecipientType.TO);

if (addresses != null && addresses.length > 0) {
return addresses[0].toString();

}
return "";
}

// 得到信件主题

public String getMessageSubject() throws MessagingException {
String subject = currentMessage.getSubject();

if (subject == null) {
subject = "";

}
return subject;
}

//得到信件的大小

public String getMessageSize() throws MessagingException {
String size = "?";

int bSize = currentMessage.getSize();

if (bSize != -1) {
if (bSize >= 1024 * 1024) {
int mbSize = bSize / (1024 * 1024);
size = mbSize + " MB";

} else if (bSize >= 1024) {
int kbSize = bSize / 1024;
size = kbSize + " KB";

} else {
size = bSize + " Bytes";
}
}

return size;
}

// 得到信件的内容
public String getMessageText()
throws IOException, MessagingException {
String text = currentMessage.getContentType();

if (currentMessage.isMimeType("text/*")) {
text = (String) currentMessage.getContent();
} else if (currentMessage.isMimeType("multipart/*")) {
Multipart multipart = (Multipart) currentMessage.getContent();
BodyPart firstPart = multipart.getBodyPart(0);

if (firstPart.isMimeType("text/*")) {
text = (String) firstPart.getContent();
}
}

return text;
}

// 返回一个信件列表
// 主要用于多封信件的发送,删除,转移等

Message[] findMessages(String[] messageNumbers)
throws MessagingException {
if (messageNumbers != null) {
List messageList = new ArrayList();

for (int i = 0; i < messageNumbers.length; ++i) {
int messageNumber = 0;

try {
messageNumber = Integer.parseInt(messageNumbers[i]);

} catch (NumberFormatException e) {
messageNumber = 0;
}

if (messageNumber > 0) {
messageList.add(currentFolder.getMessage(messageNumber));
}
}

return (Message[]) messageList.toArray(new Message[0]);
}

return new Message[0];
}

// jsp调用时根据得到的命令参数来进行处理。

public void doCommand(HttpServletRequest request)
throws MessagingException {
String command = request.getParameter("command");
String[] messageNumbers = request.getParameterValues("number");
String toFolderName = request.getParameter("to");

Folder toFolder = findFolder(toFolderName);
//进行复制处理
if ("Copy".equalsIgnoreCase(command)) {
if (toFolder != null) {
Message[] messages = findMessages(messageNumbers);
currentFolder.copyMessages(messages, toFolder);
}
} else if ("Move".equalsIgnoreCase(command)) {//转移信件到别的文件夹

if (toFolder != null) {
Message[] messages = findMessages(messageNumbers);
currentFolder.copyMessages(messages, toFolder);
currentFolder.setFlags(messages,
new Flags(Flags.Flag.DELETED), true);
}
} else if ("Delete".equalsIgnoreCase(command)) {//删除信件

Message[] messages = findMessages(messageNumbers);
currentFolder.setFlags(messages, new Flags(Flags.Flag.DELETED),
true);

} else if ("Send".equalsIgnoreCase(command)) {//发送信件

//得到数据
//发送人地址
//发送地址
//抄送地址
//暗送地址
//主题
//内容
//回复(如果是回复信件的话,得到原信件的编号)
defaultFrom = request.getParameter("from");
String to = request.getParameter("to");
String cc = request.getParameter("cc");
String bcc = request.getParameter("bcc");
String subject = request.getParameter("subject");
String text = request.getParameter("text");

String reply = request.getParameter("reply");

Message message = null;
int replyNumber = 0;

try {
replyNumber = Integer.parseInt(reply);

} catch (NumberFormatException e) {}

if (replyNumber > 0) {
message = currentFolder.getMessage(replyNumber).reply(false);
} else {
message = new MimeMessage(session);
}

message.setFrom(new InternetAddress(defaultFrom));

if (to != null) {
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));

}
if (cc != null) {
message.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(cc));

}
if (bcc != null) {
message.setRecipients(Message.RecipientType.BCC,
InternetAddress.parse(bcc));

}
message.setSubject(subject);
message.setText(text);

Transport.send(message);
}
}

// 因扩展HttpSessionBindingListener接口所以必须实现valueBound,valueUnbound方法

public void valueBound(HttpSessionBindingEvent event) {}

public void valueUnbound(HttpSessionBindingEvent event) {
close();
}
}
maxpain 2002-12-30
  • 打赏
  • 举报
回复
//我写了注释了。你自己看吧
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class WebMailBean implements HttpSessionBindingListener {
Session session = null;
String protocol = null;
String host = null;
int port = -1;
String user = null;
String defaultFrom = null;
Store store = null;
Folder[] folders = null;
String[] folderNames = null;
Folder currentFolder = null;
int currentMessageNumber = 0;
Message currentMessage = null;

//使用你选择的smtp服务器
public WebMailBean() {
Properties properties = System.getProperties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.host", "mail.yangnan.com");
session = Session.getInstance(properties, null);

// session.setDebug(true);
}

// 返回一个已安装协议的列表

public String[] getProtocols() {
Provider[] providers = session.getProviders();

List storeProtocols = new ArrayList();

for (int i = 0; i < providers.length; ++i) {
if (providers[i].getType() == Provider.Type.STORE) {
storeProtocols.add(providers[i].getProtocol());
}
}

return (String[]) storeProtocols.toArray(new String[0]);
}

// 属性设置方法
// 包括主机,协议,端口等

public void setProtocol(String protocol) {
if (this.protocol == null) {
this.protocol = protocol;
}
}

public String getProtocol() {
return this.protocol;
}

public void setHost(String host) {
if (this.host == null) {
this.host = host;
}
}

public String getHost() {
return this.host;
}

public void setPort(int port) {
if (this.port == -1) {
this.port = port;
}
}

public int getPort() {
return this.port;
}
//用户
public void setUser(String user) {
if (this.user == null) {
this.user = user;
}
}

public String getUser() {
return this.user;
}

//使用密码来初始化一个连接

public void setPassword(String password) throws MessagingException {
connect(password);
}

// 使用用户的名称和主机来初始化一个发送人地址

public String getFrom() {
if (defaultFrom == null) {
defaultFrom = user + "@" + host;

}
return defaultFrom;
}


void connect(String password) throws MessagingException {
if (store == null) {
store = session.getStore(protocol);
store.connect(host, port, user, password);
cacheFolders();
setFolder("INBOX");
}
}

// 在用户登录时判断是否仍然在连接中

public boolean isConnected() {
if (store != null) {
return store.isConnected();

}
return false;
}

// 关闭连接

void close() {
if (isConnected()) {
try {

//将所有打开的文件夹关闭

if (folders != null) {
for (int i = 0; i < folders.length; ++i) {
if (folders[i].isOpen()) {
folders[i].close(true);
}
}
}

if (store != null) {
store.close();

}
} catch (MessagingException e) {

// 异常的处理
}
}
}

// 对文件夹的操作进行缓存

void cacheFolders() throws MessagingException {
Folder defaultFolder = store.getDefaultFolder();
Folder[] childFolders = defaultFolder.list();

List availableFolders = new ArrayList();

for (int i = 0; i < childFolders.length; ++i) {
String folderName = childFolders[i].getName();
if (!folderName.startsWith(".")
&&!folderName.equalsIgnoreCase("INBOX")) {
availableFolders.add(childFolders[i]);
}
}

// 按照文件夹的名称进行排序

Collections.sort(availableFolders, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Folder) o1).getName()
.compareToIgnoreCase(((Folder) o2).getName());
}
});

// 将INBOX加到列表的第一的位置
Folder inbox = defaultFolder.getFolder("INBOX");

if (inbox.exists()) {
availableFolders.add(0, inbox);

}
folders = (Folder[]) availableFolders.toArray(new Folder[0]);
}

// 从缓存的数组中寻找文件夹

Folder findFolder(String folderName) {
for (int i = 0; i < folders.length; ++i) {
if (folders[i].getName().equals(folderName)) {
return folders[i];
}
}

return null;
}

public void setFolder(String folderName) throws MessagingException {
currentFolder = findFolder(folderName);

if ((!currentFolder.isOpen()) && (currentFolder.exists())
&& ((currentFolder.getType() & Folder.HOLDS_MESSAGES)
!= 0)) {
currentFolder.open(Folder.READ_WRITE);
}

currentMessageNumber = 0;
currentMessage = null;
}

// 得到当前文件夹名称
public String getFolderName() {
return currentFolder.getName();
}

//得到一个缓存文件夹名称数组
public String[] getFolderNames() {
String[] folderNames = new String[folders.length];

for (int i = 0; i < folders.length; ++i) {
folderNames[i] = folders[i].getName();
}

return folderNames;
}

//得到除当前文件夹以外的所有文件夹的名称
//以便用于信息在文件夹之间的转移

public String[] getOtherFolderNames() {
String[] folderNames = new String[folders.length - 1];

for (int i = 0, j = 0; i < folders.length; ++i) {
if (folders[i] != currentFolder) {
folderNames[j++] = folders[i].getName();
}
}

return folderNames;
}

// 返回当前文件夹中的信件数目
public int getMessageCount() throws MessagingException {
return currentFolder.getMessageCount();
}

//循环得到当前文件夹中未删除的信件
public boolean getNextMessage() throws MessagingException {
int messageCount = currentFolder.getMessageCount();

for (int i = currentMessageNumber + 1; i <= messageCount; ++i) {
Message nextMessage = currentFolder.getMessage(i);

if (!nextMessage.isSet(Flags.Flag.DELETED)) {
currentMessageNumber = i;
currentMessage = nextMessage;

return true;
}
}

return false;
}

// 设置信件编号,rest一下信件的指针。
public void setMessage(int messageNumber)
throws MessagingException {
if (messageNumber == 0) {
currentMessageNumber = messageNumber;
currentMessage = null;

} else {
currentMessageNumber = messageNumber - 1;
getNextMessage();
}
}
sokol 2002-12-30
  • 打赏
  • 举报
回复
你发不出去邮件除了楼上说的那种情况外,还有一种情况是像21cn等smtp服务器只有你交费了才能使用它的邮件服务,否则你只能从21cn的网站上登录,我有完整的javamail程序源代码,其实javamail的难点在收。
kaolaxiong 2002-12-30
  • 打赏
  • 举报
回复
邮件服务器有无安全认证
lazycalm 2002-12-30
  • 打赏
  • 举报
回复
你做了身份验证处理了吗?现在SMTP服务都要验证的。加一点点代码就可以了
www.cn-java.com 上有专门的说明,在JavaMail专题里。
charbee 2002-12-30
  • 打赏
  • 举报
回复
来迟了,麻烦,能不能也给我发一份
charbee@163.net
sjzthinkpad 2002-12-30
  • 打赏
  • 举报
回复
可以给我发一个吗?谢谢!thinkpad@inhe.net
加载更多回复(10)

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧