java如何使用ssl连接qq邮箱
发布时间:2025-05-24 07:25:08 发布人:远客网络
一、java如何使用ssl连接qq邮箱
Gmail目前已经启用了POP3和SMTP服务,与其他邮箱不同的是Gmail提供的POP3和SMTP是使用安全套接字层SSL的,因此常规的JavaMail程序是无法收发邮件的,下面是使用JavaMail如何收取Gmail邮件以及发送邮件的代码:
1.[代码]GmailFetch.java跳至[1][2][全屏预览]
03importjava.io.UnsupportedEncodingException;
07importjavax.mail.internet.InternetAddress;
08importjavax.mail.internet.MimeUtility;
16publicstaticvoidmain(Stringargv[])throwsException{
18Security.addProvider(newcom.sun.net.ssl.internal.ssl.Provider());
19finalStringSSL_FACTORY="javax.net.ssl.SSLSocketFactory";
22Propertiesprops=System.getProperties();
23props.setProperty("mail.pop3.socketFactory.class",SSL_FACTORY);
24props.setProperty("mail.pop3.socketFactory.fallback","false");
25props.setProperty("mail.pop3.port","995");
26props.setProperty("mail.pop3.socketFactory.port","995");
28//以下步骤跟一般的JavaMail操作相同
29Sessionsession=Session.getDefaultInstance(props,null);
31//请将红色部分对应替换成你的邮箱帐号和密码
32URLNameurln=newURLName("pop3","pop.gmail.com",995,null,
34Storestore=session.getStore(urln);
38inbox=store.getFolder("INBOX");
39inbox.open(Folder.READ_ONLY);
40FetchProfileprofile=newFetchProfile();
41profile.add(FetchProfile.Item.ENVELOPE);
42Message[]messages=inbox.getMessages();
43inbox.fetch(messages,profile);
44System.out.println("收件箱的邮件数:"+messages.length);
45for(inti=0;i<messages.length;i++){
47Stringfrom=decodeText(messages[i].getFrom()[0].toString());
48InternetAddressia=newInternetAddress(from);
49System.out.println("FROM:"+ia.getPersonal()+'('+ia.getAddress()+')');
51System.out.println("TITLE:"+messages[i].getSubject());
53System.out.println("SIZE:"+messages[i].getSize());
55System.out.println("DATE:"+messages[i].getSentDate());
67protectedstaticStringdecodeText(Stringtext)
68throwsUnsupportedEncodingException{
71if(text.startsWith("=?GB")||text.startsWith("=?gb"))
72text=MimeUtility.decodeText(text);
74text=newString(text.getBytes("ISO8859_1"));
03importjava.security.Security;
07importjavax.mail.Authenticator;
09importjavax.mail.MessagingException;
10importjavax.mail.PasswordAuthentication;
13importjavax.mail.internet.AddressException;
14importjavax.mail.internet.InternetAddress;
15importjavax.mail.internet.MimeMessage;
23publicstaticvoidmain(String[]args)throwsAddressException,MessagingException{
24Security.addProvider(newcom.sun.net.ssl.internal.ssl.Provider());
25finalStringSSL_FACTORY="javax.net.ssl.SSLSocketFactory";
27Propertiesprops=System.getProperties();
28props.setProperty("mail.smtp.host","smtp.gmail.com");
29props.setProperty("mail.smtp.socketFactory.class",SSL_FACTORY);
30props.setProperty("mail.smtp.socketFactory.fallback","false");
31props.setProperty("mail.smtp.port","465");
32props.setProperty("mail.smtp.socketFactory.port","465");
33props.put("mail.smtp.auth","true");
34finalStringusername="[邮箱帐号]";
35finalStringpassword="[邮箱密码]";
36Sessionsession=Session.getDefaultInstance(props,newAuthenticator(){
37protectedPasswordAuthenticationgetPasswordAuthentication(){
38returnnewPasswordAuthentication(username,password);
42Messagemsg=newMimeMessage(session);
45msg.setFrom(newInternetAddress(username+"@mo168.com"));
46msg.setRecipients(Message.RecipientType.TO,
47InternetAddress.parse("[收件人地址]",false));
53System.out.println("Messagesent.");
二、用java写的邮件发送程序
界面自己写一下就可以了,把相关的参数传进去就可以了。这个是我以前写的。用的javamail。有main方法,测试一下自己的邮件,应该没问题的。希望可以帮到你。注意导入你需要的javamail.jar的包-------------------------------------------------------------- package com.fourpane.mail; import java.util.Properties; import javax.mail.Address; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.NoSuchProviderException; import javax.mail.Session; import javax.mail.Store; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class TestMail{ public static void main(String[] args){//TestMail.sendMail();//TestMail.receiveMail(); TestMail.deleteMail();}/*** send mail*/ public static void sendMail(){ String host="smtp.sina.com";//邮件服务器 String from="xingui5624@sina.com";//发件人地址 String to="ilovenumen@vip.sina.com";//接受地址(必须支持pop3协议) String userName="xingui5624";//发件人邮件名称 String pwd="******";//发件人邮件密码 Properties props= new Properties(); props.put("mail.smtp.host", host); props.put("mail.smtp.auth","true"); Session session= Session.getDefaultInstance(props); session.setDebug(true); MimeMessage msg= new MimeMessage(session); try{ msg.setFrom(new InternetAddress(from)); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to));//发送 msg.setSubject("我的测试...........");//邮件主题 msg.setText("测试内容。。。。。。。");//邮件内容 msg.saveChanges(); Transport transport= session.getTransport("smtp"); transport.connect(host, userName, pwd);//邮件服务器验证 transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO)); System.out.println("send ok...........................");} catch(AddressException e){ e.printStackTrace();} catch(MessagingException e){ e.printStackTrace();}}/*** receive mail*/ public static void receiveMail(){ String host="pop3.sina.com"; String userName="xingui5624"; String passWord="******"; Properties props= new Properties(); Session session= Session.getDefaultInstance(props); session.setDebug(true); try{ System.out.println("receive..............................."); Store store= session.getStore("pop3"); store.connect(host, userName,passWord);//验证 Folder folder= store.getFolder("INBOX");//取得收件文件夹 folder.open(Folder.READ_WRITE); Message msg[]= folder.getMessages(); System.out.println("邮件个数:"+ msg.length); for(int i=0; i<msg.length; i++){ Message message= msg[i]; Address address[]= message.getFrom(); StringBuffer from= new StringBuffer();/***此for循环是我项目测试用的*/ for(int j=0; j<address.length; j++){ if(j> 0) from.append(";"); from.append(address[j].toString());} System.out.println(message.getMessageNumber()); System.out.println("来自:"+ from.toString()); System.out.println("大小:"+ message.getSize()); System.out.println("主题:"+ message.getSubject()); System.out.println("时间::"+ message.getSentDate()); System.out.println("===================================================");} folder.close(true);//设置关闭 store.close(); System.out.println("receive over............................");} catch(NoSuchProviderException e){ e.printStackTrace();} catch(MessagingException e){ e.printStackTrace();}}/*** delete mail*/ public static void deleteMail(){ String host="pop3.sina.com"; String userName="xingui5624"; String passWord="******"; Properties props= new Properties();//Properties props= System.getProperties();这种方法创建 Porperties同上 Session session= Session.getDefaultInstance(props); session.setDebug(true); try{ System.out.println("begin delete..........."); Store store= session.getStore("pop3"); store.connect(host, userName, passWord);//验证邮箱 Folder folder= store.getFolder("INBOX"); folder.open(Folder.READ_WRITE);//设置我读写方式打开 int countOfAll= folder.getMessageCount();//取得邮件个数 int unReadCount= folder.getUnreadMessageCount();//已读个数 int newOfCount= folder.getNewMessageCount();//未读个数 System.out.println("总个数:"+countOfAll); System.out.println("已读个数:"+unReadCount); System.out.println("未读个数:"+newOfCount); for(int i=1; i<=countOfAll; i++){ Message message= folder.getMessage(i); message.setFlag(Flags.Flag.DELETED, true);//设置已删除状态为true if(message.isSet(Flags.Flag.DELETED)) System.out.println("已经删除第"+i+"邮件。。。。。。。。。");} folder.close(true); store.close(); System.out.println("delete ok.................................");} catch(NoSuchProviderException e){ e.printStackTrace();} catch(MessagingException e){ e.printStackTrace();}}/*** reply mail*/ public static void replyMail(){//test}}注意:此实现要求邮箱都支持pop3和smtp协议。现在老的网易邮箱都支持(2006年以前注册的),所以的sina的 qq的都可以,雅虎的部分支持,具体的可以在网上搜下把。==============================================================================还有一种办法,也是我以前用到的。其实最简单的发邮件方式是用Apache的Common组件中的Email组件,封装得很不错。特简单。首先从Sun的网站上下载JavaMail框架实现,最新的版本是1.4.1。然后是JavaBeans Activation Framework,最新版本1.1.1,JavaMail需要这个框架。不过如果JDK是1.6的话就不用下了。1.6已经包括了JavaBeans Activation Framework。最后从 下载最新的Common Email,版本1.1。首先在Eclipse中建立一个新的Java工程,然后把JavaMail和Common Email解压缩,在工程中添加解压缩出来的所有Jar的引用。代码: package org.fourpane.mail; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.HtmlEmail; public class Mail{ public static void main(String[] args){//SimpleEmail email= new SimpleEmail(); HtmlEmail email= new HtmlEmail(); email.setHostName("smtp.163.com");//邮件服务器 email.setAuthentication("xingui5624","******");//smtp认证的用户名和密码 try{ email.addTo("xingui5624@163.com");//收信者 email.setFrom("xingui5624@126.com","******");//发信者 email.setSubject("xingui5624的测试邮件");//标题 email.setCharset("UTF-8");//编码格式 email.setMsg("这是一封xingui5624的测试邮件");//内容 email.send();//发送 System.out.println("send ok..........");} catch(EmailException e){ e.printStackTrace();}}}【如果发送不成功,可能是你的jar包问题,javamail的jar可能和jdk1.5以上的j2ee的jar冲突。还有就是可能你的邮箱不支持pop3和smtp协议。】
三、如何使用Java发送qq邮件
首先,邮件的发送方要开启POP3和SMTP服务--即发送qq邮件的账号要开启POP3和SMTP服务
5.找到:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务—点击开启
7.稍等一会,很得到一个授权码!–注意:这个一定要记住,一会用到
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
public static void main(String[] args) throws AddressException, MessagingException{
Properties properties= new Properties();
properties.put("mail.transport.protocol","smtp");//连接协议
properties.put("mail.smtp.host","smtp.qq.com");//主机名
properties.put("mail.smtp.port", 465);//端口号
properties.put("mail.smtp.auth","true");
properties.put("mail.smtp.ssl.enable","true");//设置是否使用ssl安全连接---一般都使用
properties.put("mail.debug","true");//设置是否显示debug信息 true会在控制台显示相关信息
Session session= Session.getInstance(properties);
Message message= new MimeMessage(session);
message.setFrom(new InternetAddress("123456789@qq.com"));
//设置收件人地址 message.setRecipients( RecipientType.TO, new InternetAddress[]{ new InternetAddress("987654321@qq.com")});
message.setSubject("这是第一封Java邮件");
message.setText("内容为:这是第一封java发送来的邮件。");
Transport transport= session.getTransport();
transport.connect("123456789@qq.com","vvctybgbvvophjcj");//密码为刚才得到的授权码
//发送邮件 transport.sendMessage(message, message.getAllRecipients());
下面是我收到邮件的截图,当然我把源码中的邮件地址都是修改了,不是真实的,你们测试的时候,可以修改能你们自己的邮箱。最后,祝你也能成功,如果有什么问题,可以一起讨论!
得到的授权码一定要保存好,程序中要使用