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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值