急求一个java发邮件程序!,第1张

首先我去javasuncom下载了一个javamailapi12,现在最新版本13了。其实这个api 是一些类库集合。解压后,找到mailjar加入你的classpath中即可,还有其他一些jar,一般用户都用不着。接着,要去下载一个 JavaBeans(tm)Activation Framework Standard Extension

简称JAF的冬冬,将 activationjar加入classpath。主要是用到里面的类javaxactivation。JAF是sun的一个standard extension。100% Pure Java (大家都爱这末说,~_~)可以看看他的Specification(我也没看完)。

尽管java中有邮件发送接受类,但用Javamailapi更方便。我差点误入歧途。我主要讲讲带附件邮件发送。假如专心看,在 Javamailapi中的demo中有一个sendfilejava的Example。假如您看过那个了,以下的就不用看了,因为这个比它的简单,没有输入任何参数。

import javaio;

import javautil;

import javaxmail;

import javaxmailinternet;

import javaxactivation;

//Warning: 以下内容是必须往里面套的,都是封装好的东西,过多的理由我也说出上,高手补充。

public class SendAttachment

{

public static void main(String[] args)

{

try

{

// 创建 properties ,里面包含了发送邮件服务器的地址。

Properties mailProps = new Properties();

mailPropsput("mailsmtphost", "192001"); //"mailsmtphost"随便叫啥都行,"192001"必须是真实可用的。

// 创建 session

Session mailSession = SessiongetDefaultInstance(mailProps);

// 创建 邮件的message,message对象包含了邮件众多有的部件,都是封装成了set方法去设置的

MimeMessage message = new MimeMessage(mailSession);

// 设置发信人

messagesetFrom(new InternetAddress(

"chqn@cmmailcom"));

//收信人

messagesetRecipient(MessageRecipientTypeTO,

new InternetAddress("chqn@cmmailcom"));

// 邮件标题

messagesetSubject("I love you"); //haha,恐吓人

// 创建 Mimemultipart,这是包含多个附件是必须创建的。假如只有一个内容,没有附件,可以直接用messagesetText(String str)

//去写信的内容,比较方便。附件等于是要创建多个内容,往下看更清楚。

MimeMultipart multi = new MimeMultipart();

// 创建 BodyPart,主要作用是将以后创建的n个内容加入MimeMultipart也就是可以发n个附件。我这里有2个BodyPart

BodyPart textBodyPart = new MimeBodyPart(); //第一个BodyPart主要写一些一般的信件内容。

textBodyPartsetText("详情见附件");

// 压入第一个BodyPart到MimeMultipart对象中。

multiaddBodyPart(textBodyPart);

// 创建第二个BodyPart,是一个FileDAtaSource

FileDataSource fds = new FileDataSource("c:\myattachmenttxt"); //必须存在的文档,否则throw异常。

BodyPart fileBodyPart = new MimeBodyPart(); //第二个BodyPart

fileBodyPartsetDataHandler(new DataHandler(fds)); //字符流形式装入文件

fileBodyPartsetFileName("reportxls"); //设置文件名,可以不是原来的文件名。

/

以下是我用另一种方式写入附件,但不成功,附件总是0K字节。请高手点解,以上的方式我是参照demo的。

FileInputStream in = new FileInputSteam("c:\myattachmenttxt");

BodyPart fileBodyPart = new MimeBodyPart(in);

fileBodyPartsetFileName("reportxls"); //奶奶的折腾我2天,搞不定。

/

//不讲了,同第一个BodyPart

multiaddBodyPart(fileBodyPart);

// MimeMultPart作为Content加入message

messagesetContent(multi);

// 所有以上的工作必须保存。

messagesaveChanges();

// 发送,利用Transport类,它是SMTP的邮件发送协议,

Transportsend(message);

}

catch (Exception exc)

{

excprintStackTrace();

}

}

}

java mail调用outlook的方法例子

1 将邮件写入到文件的代码

msgsaveChanges();

File f = new File("d:/testeml");

msgwriteTo(new FileOutputStream(f));

2 调用outlook的代码

Process p = RuntimegetRuntime()exec("cmd /C start msimnexe /eml:d:/testeml");

3 完整的代码如下

package codejdkmail;

import javaioFile;

import javaioFileNotFoundException;

import javaioFileOutputStream;

import javaioIOException;

import javautilDate;

import javautilEnumeration;

import javautilHashMap;

import javautilProperties;

import javautilVector;

import javaxactivationDataHandler;

import javaxactivationFileDataSource;

import javaxmailAddress;

import javaxmailAuthenticationFailedException;

import javaxmailMessage;

import javaxmailMessagingException;

import javaxmailMultipart;

import javaxmailSession;

import javaxmailTransport;

import javaxmailinternetInternetAddress;

import javaxmailinternetMimeBodyPart;

import javaxmailinternetMimeMessage;

import javaxmailinternetMimeMultipart;

import javaxmailinternetMimeUtility;

public class EmailWriteToFile {

// 定义发件人、收件人、SMTP服务器、用户名、密码、主题、内容等

private String displayName;

private String to;

private String from;

private String smtpServer;

private String username;

private String password;

private String subject;

private String content;

private boolean ifAuth; // 服务器是否要身份认证

private String filename = "";

private Vector file = new Vector(); // 用于保存发送附件的文件名的集合

private String contentType = "text/html";

private String charset = "utf-8";

public void addFile(String filename) {

fileadd(filename);

}

public String getContentType() {

return contentType;

}

public void setContentType(String contentType) {

thiscontentType = contentType;

}

public String getCharset() {

return charset;

}

public void setCharset(String charset) {

thischarset = charset;

}

/

设置SMTP服务器地址

/

public void setSmtpServer(String smtpServer) {

thissmtpServer = smtpServer;

}

/

设置发件人的地址

/

public void setFrom(String from) {

thisfrom = from;

}

/

设置显示的名称

/

public void setDisplayName(String displayName) {

thisdisplayName = displayName;

}

/

设置服务器是否需要身份认证

/

public void setIfAuth(boolean ifAuth) {

thisifAuth = ifAuth;

}

/

设置E-mail用户名

/

public void setUserName(String username) {

thisusername = username;

}

/

设置E-mail密码

/

public void setPassword(String password) {

thispassword = password;

}

/

设置接收者

/

public void setTo(String to) {

thisto = to;

}

/

设置主题

/

public void setSubject(String subject) {

thissubject = subject;

}

/

设置主体内容

/

public void setContent(String content) {

thiscontent = content;

}

public EmailWriteToFile() {

}

private int port = 25;

public int getPort() {

return port;

}

public void setPort(int port) {

thisport = port;

}

/

发送邮件

@throws IOException

@throws FileNotFoundException

/

public boolean send() throws FileNotFoundException, IOException {

HashMap<String, String> map = new HashMap<String, String>();

mapput("state", "success");

String message = "邮件发送成功!";

Session session = null;

Properties props = SystemgetProperties();

propsput("mailsmtphost", smtpServer);

propsput("mailsmtpport", port);

try {

propsput("mailsmtpauth", "false");

session = SessiongetDefaultInstance(props, null);

sessionsetDebug(false);

Transport trans = null;

Message msg = new MimeMessage(session);

try {

Address from_address = new InternetAddress(from, displayName);

msgsetFrom(from_address);

} catch (javaioUnsupportedEncodingException e) {

eprintStackTrace();

}

InternetAddress[] address = { new InternetAddress(to) };

msgsetRecipients(MessageRecipientTypeTO, address);

msgsetSubject(subject);

Multipart mp = new MimeMultipart();

MimeBodyPart mbp = new MimeBodyPart();

mbpsetContent(contenttoString(), getContentType() + ";charset=" + getCharset());

mpaddBodyPart(mbp);

if (!fileisEmpty()) {// 有附件

Enumeration efile = fileelements();

while (efilehasMoreElements()) {

mbp = new MimeBodyPart();

filename = efilenextElement()toString(); // 选择出每一个附件名

FileDataSource fds = new FileDataSource(filename); // 得到数据源

mbpsetDataHandler(new DataHandler(fds)); // 得到附件本身并至入BodyPart

mbpsetFileName(MimeUtilityencodeText(fdsgetName(), getCharset(),"B")); // 得到文件名同样至入BodyPart

mpaddBodyPart(mbp);

}

fileremoveAllElements();

}

msgsetContent(mp); // Multipart加入到信件

msgsetSentDate(new Date()); // 设置信件头的发送日期

// 发送信件

msgsaveChanges();

File f = new File("d:/testeml");

msgwriteTo(new FileOutputStream(f));

} catch (AuthenticationFailedException e) {

mapput("state", "failed");

message = "邮件发送失败!错误原因: " + "身份验证错误!";

eprintStackTrace();

return false;

} catch (MessagingException e) {

message = "邮件发送失败!错误原因: " + egetMessage();

mapput("state", "failed");

eprintStackTrace();

Exception ex = null;

if ((ex = egetNextException()) != null) {

Systemoutprintln(extoString());

exprintStackTrace();

}

return false;

}

// Systemoutprintln(" 提示信息:"+message);

mapput("message", message);

return true;

}

public static void main(String[] args) throws FileNotFoundException, IOException, InterruptedException {

EmailWriteToFile o = new EmailWriteToFile();

osetSmtpServer("localhost");

osetFrom("from@fromcom");

osetDisplayName("TOM");

osetTo("to@tocom");

osetSubject("Test Subject");

osetContent("Test Content");

osetCharset("GBK");

oaddFile("e:/读我txt");

osend();

Process p = RuntimegetRuntime()exec("cmd /C start msimnexe /eml:d:/testeml");

}

}

小公司用javamail就行了 大公司看你的操作系统 要是Linux的话推荐用postfix Windows的话推荐用exchange。

附上exchange源码要使用的话需要加包

import javaioUnsupportedEncodingException;

import javautilDate;

import javautilProperties;

import javaxmailBodyPart;

import javaxmailMessage;

import javaxmailMessagingException;

import javaxmailMultipart;

import javaxmailSession;

import javaxmailTransport;

import javaxmailinternetInternetAddress;

import javaxmailinternetMimeBodyPart;

import javaxmailinternetMimeMessage;

import javaxmailinternetMimeMultipart;

public class Mailer {

private String host;

private String auth;

private String username;

private String domainUser;

private String password;

public boolean send(String[] to, String[] cc, String[] bcc, String subject, String content) throws MessagingException {

Properties props = new Properties();

propsput("mailsmtphost", host);

propsput("mailsmtpauth", auth);

Session s = SessiongetInstance(props);

//ssetDebug(true);

MimeMessage message = new MimeMessage(s);

InternetAddress from = new InternetAddress(username);

messagesetFrom(from);

//eprintStackTrace();

//messagesetFrom(from);

InternetAddress[] Toaddress = new InternetAddress[tolength];

for (int i = 0; i < tolength; i++)

Toaddress[i] = new InternetAddress(to[i]);

messagesetRecipients(MessageRecipientTypeTO, Toaddress);

if (cc != null) {

InternetAddress[] Ccaddress = new InternetAddress[cclength];

for (int i = 0; i < cclength; i++)

Ccaddress[i] = new InternetAddress(cc[i]);

messagesetRecipients(MessageRecipientTypeCC, Ccaddress);

}

if (bcc != null) {

InternetAddress[] Bccaddress = new InternetAddress[bcclength];

for (int i = 0; i < bcclength; i++)

Bccaddress[i] = new InternetAddress(bcc[i]);

messagesetRecipients(MessageRecipientTypeBCC, Bccaddress);

}

messagesetSubject(subject);

messagesetSentDate(new Date());

BodyPart mdp = new MimeBodyPart();

mdpsetContent(content, "text/html;charset=utf-8");

Multipart mm = new MimeMultipart();

mmaddBodyPart(mdp);

messagesetContent(mm);

messagesaveChanges();

Transport transport = sgetTransport("smtp");

transportconnect(host, (null == domainUser) username : domainUser, password);

transportsendMessage(message, messagegetAllRecipients());

transportclose();

return true;

}

public Mailer(String host, String auth, String domainUser, String username, String password) {

super();

thishost = host;

thisauth = auth;

thisdomainUser = domainUser;

thisusername = username;

thispassword = password;

}

public static void main(String[]args){

try {

new Mailer("你的ip", "true", "域名\\域用户", "邮件", "密码")send(new String[] { "281683400@qqcom" }, null, null, "demo_title", "<h3>test</h3>");

} catch (MessagingException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

String to="test1@qqcom,test2@gmailcom,test3@163com";

InternetAddress[] toList = new InternetAddress()parse(to);

msgsetRecipients(MessageRecipientTypeTO, toList);

Transportsend(msg);

或者直连邮件网关,并由邮件网关直接转发至收件箱所在的服务器,因此发送速度是基本不受限的。如果没有邮件网关,同时又不想自己完成相关功能,那么建议不要只让一台邮件服务器转发你的邮件,而是多连几台,将自己的邮件平均分配到每台邮件服务器上,这样就不会由于发送过多,而被拒了。

至于处理能力,可以提几点关于提高发送能力的建议

1.SMTP协议是支持长连接的协议,同时mailjar实现了SMTP协议的连接、邮件发送及连接断开,至于对连接的维护没有涉及;同时Spring中的邮件支持是通过封装mailjar实现的,但只提供了单笔发送和批量发送(均为短连接)。

2.如果使用长连接,建议再引入连接池,那样既便于维护连接,又可以提高连接的使用率。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 急求一个java发邮件程序!

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情