jmail 4.5使用gmail smtp ssl解决方法

现在很多email都没法提供smtp发信,但是gmail这个稳定的平台给了很多网站站长的一个希望。可惜就是smtp.gmail.com 是用ssl发送,一般的情况下asp+jmail是没法发送的,但是找了半天才找到以下的代码可以解决以上的问题。

jmail 使用gmail smtp.gmail.com 发送

package org.dreams.mail;

import java.io.bufferedreader;
import java.io.ioexception;
import java.io.inputstreamreader;
import java.util.date;
import java.util.properties;

import javax.mail.authenticator;
import javax.mail.folder;
import javax.mail.message;
import javax.mail.messagingexception;
import javax.mail.passwordauthentication;
import javax.mail.sendfailedexception;
import javax.mail.session;
import javax.mail.store;
import javax.mail.urlname;
import javax.mail.internet.internetaddress;
import javax.mail.internet.mimebodypart;
import javax.mail.internet.mimemessage;
import javax.mail.internet.mimemultipart;

import com.sun.mail.smtp.smtpaddressfailedexception;
import com.sun.mail.smtp.smtpaddresssucceededexception;
import com.sun.mail.smtp.smtpsendfailedexception;
import com.sun.mail.smtp.smtptransport;

public class jmailsslsender {

public static void main(string[] argv) {
system.setproperty("javax.net.ssl.truststore", "c:\\javalib\\ssl\\mail");//密钥存放的位置
system.setproperty("javax.net.ssl.truststorepassword", "打开密钥文件的密码");

string to = "收信者地址";
string subject = "hello";//邮件标题
string from = "送信者地址";
string cc = "抄送者地址";
string bcc = null;
string url = null;

string mailhost = "smtp.gmail.com:465";//邮件服务器地址
string mailer = "jmailsslsender";
string file = null;
string protocol = null;
string host = "smtp.gmail.com:465";
string user = "用户名";
string password = "密码";

string record = null; // name of folder in which to record mail
boolean debug = true;
boolean verbose = true;
boolean auth = true;
boolean ssl = true;
bufferedreader in = new bufferedreader(new inputstreamreader(system.in));
int optind;

try {

properties props = system.getproperties();
if (mailhost != null)
props.put("mail.smtp.host", mailhost);

if (auth) {
if (ssl) {
props.put("mail.smtps.auth", "true");//ssl连接使用的属性
} else {
props.put("mail.smtp.auth", "true");//普通连接的属性
}

}

// get a session object
session session = session.getinstance(props, new authenticator() {
protected passwordauthentication getpasswordauthentication() {
return new passwordauthentication("用户名", "密码");
}
});

if (debug) {
session.setdebug(true);
}

// construct the message
message msg = new mimemessage(session);
if (from != null)
msg.setfrom(new internetaddress(from));
else
msg.setfrom();

msg.setrecipients(message.recipienttype.to, internetaddress.parse(to, false));
if (cc != null)
msg.setrecipients(message.recipienttype.cc, internetaddress.parse(cc, false));
if (bcc != null)
msg.setrecipients(message.recipienttype.bcc, internetaddress.parse(bcc, false));

msg.setsubject(subject);

string text = "i am liu!";//collect(in);

if (file != null) {
// attach the specified file.
// we need a multipart message to hold the attachment.
mimebodypart mbp1 = new mimebodypart();
mbp1.settext(text);
mimebodypart mbp2 = new mimebodypart();
mbp2.attachfile(file);
mimemultipart mp = new mimemultipart();
mp.addbodypart(mbp1);
mp.addbodypart(mbp2);
msg.setcontent(mp);
} else {
// if the desired charset is known, you can use
// settext(text, charset)
msg.settext(text);
}

msg.setheader("x-mailer", mailer);
msg.setsentdate(new date());

// send the thing off
/*
* the simple way to send a message is this:
*
transport.send(msg);
*
* but we're going to use some smtp-specific features for
* demonstration purposes so we need to manage the transport
* object explicitly.
*/
smtptransport t = (smtptransport) session.gettransport(ssl ? "smtps" : "smtp");
try {
if (auth)
t.connect(mailhost, user, password);
else
t.connect();

t.sendmessage(msg, msg.getallrecipients());
} finally {
if (verbose)
system.out.println("response: " + t.getlastserverresponse());
t.close();
}

system.out.println("\nmail was sent successfully.");

// keep a copy, if requested.

if (record != null) {
// get a store object
store store = null;
if (url != null) {
urlname urln = new urlname(url);
store = session.getstore(urln);
store.connect();
} else {
if (protocol != null)
store = session.getstore(protocol);
else
store = session.getstore();

// connect
if (host != null || user != null || password != null)
store.connect(host, user, password);
else
store.connect();
}

// get record folder. create if it does not exist.
folder folder = store.getfolder(record);
if (folder == null) {
system.err.println("can't get record folder.");
system.exit(1);
}
if (!folder.exists())
folder.create(folder.holds_messages);

message[] msgs = new message[1];
msgs[0] = msg;
folder.appendmessages(msgs);

system.out.println("mail was recorded successfully.");
}

} catch (exception e) {
if (e instanceof sendfailedexception) {
messagingexception sfe = (messagingexception) e;
if (sfe instanceof smtpsendfailedexception) {
smtpsendfailedexception ssfe = (smtpsendfailedexception) sfe;
system.out.println("smtp send failed:");
if (verbose)
system.out.println(ssfe.tostring());
system.out.println(" command: " + ssfe.getcommand());
system.out.println(" retcode: " + ssfe.getreturncode());
system.out.println(" response: " + ssfe.getmessage());
} else {
if (verbose)
system.out.println("send failed: " + sfe.tostring());
}
exception ne;
while ((ne = sfe.getnextexception()) != null && ne instanceof messagingexception) {
sfe = (messagingexception) ne;
if (sfe instanceof smtpaddressfailedexception) {
smtpaddressfailedexception ssfe = (smtpaddressfailedexception) sfe;
system.out.println("address failed:");
if (verbose)
system.out.println(ssfe.tostring());
system.out.println(" address: " + ssfe.getaddress());
system.out.println(" command: " + ssfe.getcommand());
system.out.println(" retcode: " + ssfe.getreturncode());
system.out.println(" response: " + ssfe.getmessage());
} else if (sfe instanceof smtpaddresssucceededexception) {
system.out.println("address succeeded:");
smtpaddresssucceededexception ssfe = (smtpaddresssucceededexception) sfe;
if (verbose)
system.out.println(ssfe.tostring());
system.out.println(" address: " + ssfe.getaddress());
system.out.println(" command: " + ssfe.getcommand());
system.out.println(" retcode: " + ssfe.getreturncode());
system.out.println(" response: " + ssfe.getmessage());
}
}
} else {
system.out.println("got exception: " + e);
if (verbose)
e.printstacktrace();
}
}
}

public static string collect(bufferedreader in) throws ioexception {
string line;
stringbuffer sb = new stringbuffer();
while ((line = in.readline()) != null) {
sb.append(line);
sb.append("\n");
}
return sb.tostring();
}
}

/这个是一个成功的声明 FUNCTION int fsendemail(ref String sSmtpServer, ref String sSenderId, & ref String sPsw, ref String sSenderName, ref String sRcvAddr,& ref String sSenderAddr,ref String sCCAddr, & ref String sBCCAddr, ref String sSubject, & ref String sContent, ref String sAttach) Library "PSdEmail_dll.dll" 代码如下 //mail_url放邮件地址,as_mailtext放邮件内容,mail_cc是邮件的抄送地址 //as_subject是邮件主题,as_filename是附件的文件名,as_pathname是附件的完整路径名 string ls_name mailsession lms_data mailmessage lmms_message mailreturncode lmr_value integer li_i //产生邮件会话对象mses lms_data = create mailsession //邮件登录 lmr_value = lms_data.maillogon(mailnewsession!) if lmr_value mailreturnsuccess! then gnv_base.of_message("真不幸,邮件注册失败") return -1 end if //标题 lmms_message.subject = sle_subject.text //正文 lmms_message.notetext = trim(mle_content.text) + ' ' ////附件 //if as_pathname '' or as_filename '' then // mmsg.attachmentfile[1].pathname=as_pathname // mmsg.attachmentfile[1].filename=as_filename //end if //******************************校验收件人邮件地址是否是合法地址***************************// //原收件人 ls_name = sle_rcv.text lmr_value = lms_data.mailResolveRecipient(ls_name) if lmr_value = mailReturnSuccess! THEN lmms_message.Recipient[1].RecipientType = mailto! lmms_message.Recipient[1].address = "liuzhp@huadong.net" lmms_message.Recipient[1].name = "liuzhp@huadong.net" elseif lmr_value = mailReturnFailure! THEN gnv_base.of_message('收件人地址错误,请检查') return -1 else gnv_base.of_message('收件人地址错误,请检查') return -1 end if //发送邮件 lmr_value = lms_data.mailsend(lmms_message) if lmr_value mailreturnsuccess! then messagebox("邮件发送","邮件发送失败!"+char(10)+char(13)+'请检查:'+char(10)+char(13)+& '1.附件路径和名称是否正确.'+char(10)+char(13)+& '2.本地outlook配置是否正确.'+char(10)+char(13)+& '3.如以上都正确,请与系统管理员联系!') return -1 elseif lmr_value = mailreturnsuccess! then // messagebox("邮件发送","邮件发送完毕!") end if lms_data.maillogoff() //退出登录 destroy lms_data //取消邮件会话 return 1 String ls_RcvAddr //收件人 String ls_CcAddr //转发 String ls_BccAddr //暗送 String ls_Sub //主题 String ls_Content //内容 String ls_Attach = ''//附件,多个附件由ATTACHSPLIT分隔 Constant String ATTACHSPLIT = '|' //附件的分隔符号 Integer li_Rtn //返回值,0:发送成功,1:发送失败 pointer oldpointer // Declares a pointer variable oldpointer = SetPointer(HourGlass!) ls_RcvAddr = sle_Rcv.Text //收件人 ls_CcAddr = sle_CC.Text //转发 ls_BccAddr = sle_BCC.Text //暗送 ls_Sub = sle_Subject.Text //主题 ls_Content = mle_Content.Text //内容 Long ll_Row, ll_RowCnt //把附件用ATTACHSPLIT连接起来 ll_RowCnt = dw_Attach.RowCount() FOR ll_Row = 1 TO ll_RowCnt ls_Attach = ls_Attach + dw_Attach.Object.FilePath[ll_Row] +& dw_Attach.Object.FileName[ll_Row] + ATTACHSPLIT NEXT //发送 li_Rtn = fSendEmail(is_Server, is_SenderId , is_Psw, is_SenderName, is_SenderAddr,ls_RcvAddr, ls_CcAddr, ls_BccAddr, ls_Sub, ls_Content,ls_Attach) if li_rtn = 0 then gnv_base.of_message('邮件发送成功!') else gnv_base.of_message('邮件发送失败!') end if SetPointer(oldpointer) li_Rtn = fSendEmail(is_Server, is_SenderId , is_Psw, is_SenderName, is_SenderAddr, & ls_RcvAddr, ls_CcAddr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值