您当前的位置:首页 > 互联网教程

java如何使用ssl连接qq邮箱

发布时间:2025-05-24 07:25:08    发布人:远客网络

java如何使用ssl连接qq邮箱

一、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());

下面是我收到邮件的截图,当然我把源码中的邮件地址都是修改了,不是真实的,你们测试的时候,可以修改能你们自己的邮箱。最后,祝你也能成功,如果有什么问题,可以一起讨论!

得到的授权码一定要保存好,程序中要使用