用java写收发邮件的程序,求助,在线

用java写收发邮件的程序,求助,在线,第1张

界面自己写一下就可以了,把相关的参数传进去就可以了。 这个是我以前写的。用的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 = "[email protected]"//发件人地址 String to = "[email protected]"//接受地址(必须支持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=0i<msg.lengthi++) { Message message = msg[i] Address address[] = message.getFrom() StringBuffer from = new StringBuffer() /** * 此for循环是我项目测试用的 */ for(int j=0j<address.lengthj++) { 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=1i<=countOfAlli++) { 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。 最后从 http://commons.apache.org/email/ 下载最新的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("[email protected]")//收信者 email.setFrom("[email protected]", "******")//发信者 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协议。】

1.SMTP协议

用户连上邮件服务器后,要想给它发送一封电子邮件,需要遵循一定的通迅规则,SMTP协议就是用于定义这种通讯规则的。

因而,通常我们也把处理用户smtp请求(邮件发送请求)的邮件服务器称之为SMTP服务器。(25)

2.POP3协议

同样,用户若想从邮件服务器管理的电子邮箱中接收一封如困脊电子邮件的话,他连上邮件服务器后,也需要遵循一定的通迅格式,POP3协议用于定义这种通讯格式。

因而,通常我们也把处理用户pop3请求(邮件接收请求)的邮件服务器称之为POP3服务器。(110)

下图用于演示两帐户相互发送邮件的过程

3.1JavaMail API按其功能划分通常可分为如下三大类:

创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。

3.2发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了尺御某个邮件发送协议的邮件发送对象,例如SMTP协议。

接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。

3.3Session类

Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件渣渗收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。

4.邮件组织结构相关的API

MimeMessage类表示整封邮件。

MimeBodyPart类表示邮件的一个MIME消息。

MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。

5.具体的例子程序

package cn.edu.dlmu.send

import java.util.Properties

import javax.activation.DataHandler

import javax.activation.FileDataSource

import javax.mail.Message

import javax.mail.Session

import javax.mail.Transport

import javax.mail.internet.InternetAddress

import javax.mail.internet.MimeBodyPart

import javax.mail.internet.MimeMessage

import javax.mail.internet.MimeMultipart

import javax.mail.internet.MimeUtility

public class SendMail {

public static void main(String[] args) throws Exception {

Properties prop = new Properties()

//连接的邮件服务器的主机名

prop.setProperty("mail.smtp.host", "smtp.sina.com.cn")

//发送邮件的协议

prop.setProperty("mail.transport.protocol", "smtp")

//是否向邮件服务器提交认证

prop.setProperty("mail.smtp.auth", "true")

//创建session

Session session = Session.getInstance(prop)

session.setDebug(true)

//得到transport

Transport ts = session.getTransport()

//连接邮件服务器

ts.connect("smtp.sina.com.cn", "[email protected]", "xxxxx")

//发送邮件

MimeMessage message = createMessage(session)

ts.sendMessage(message, message.getAllRecipients())

ts.close()

}

public static MimeMessage createMessage(Session session) throws Exception {

MimeMessage message = new MimeMessage(session)

//设置邮件的基本信息

message.setFrom(new InternetAddress("[email protected]"))

message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"))

message.setSubject("test")

//正文

MimeBodyPart text = new MimeBodyPart()

//设置charaset可以解决中文正文的乱码问题,内嵌可下载的图片

text.setContent("你好xxx,<img src='c:/dog.jpg' />测试成功!<br/><img src='cid:aaa.jpg' />", "text/htmlcharset=gbk")

//图片1

MimeBodyPart image = new MimeBodyPart()

image.setDataHandler(new DataHandler(new FileDataSource("src/88.jpg")))

image.setContentID("aaa.jpg")

//附件

MimeBodyPart attach = new MimeBodyPart()

DataHandler dh = new DataHandler(new FileDataSource("src/javamail架包.jar"))

attach.setDataHandler(dh)

//解决文件中文乱码问题

attach.setFileName(MimeUtility.encodeText(dh.getName()))

//描述正文和图片的关系

MimeMultipart mp = new MimeMultipart()

mp.addBodyPart(text)

mp.addBodyPart(image)

mp.setSubType("related")

//描述正文和附件

MimeMultipart mp2 = new MimeMultipart()

mp2.addBodyPart(attach)

//将正文封装为一个body

MimeBodyPart content = new MimeBodyPart()

content.setContent(mp)

mp2.addBodyPart(content)

mp2.setSubType("mixed")

message.setContent(mp2)

message.saveChanges()

return message

}

}

这个念嫌册异常表示有者祥类型转换错误,有个地方需要使用 javax.mail.Multipart 类型的对象,你用了 com.sun.mail.imap.IMAPInputStream 类型,所以出现了这个异常。

根据你给的有限的资料,暂时只仔宏能分析道这么多了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12223177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存