java接收邮件
A. 求用java Socket API编写一个SMTP邮件服务器程序
awdsdsds 的回答虽然不对题,不过也差不多了,说实话,我讨厌直接要结果的人。但是也许你是希望自己学到解决方式的人,所以给你个方式。
awdsdsds 建立的是个客户端,这里跑题了,你要自己做就得建立服务器。
ServerSocket 建立的时候注意一下端口就行了。不过也不是一定的,取决于你将来的客户端设置。
然后就accept()
等着对方创建连接吧。
然后就是数据格式的问题了。
你可以正常的用客户端发送一个最简单的分析一下数据格式,接来的肯定是字节,注意一下高低位。看看应该怎么将字节数据还原成邮件。
B. 用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 = "[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=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。 最后从 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协议。】
C. Java收发邮件过程中具体的功能是怎么实现的
1.SMTP协议
用户连上邮件服务器后,要想给它发送一封电子邮件,需要遵循一定的通迅规则,SMTP协议就是用于定义这种通讯规则的。
因而,通常我们也把处理用户smtp请求(邮件发送请求)的邮件服务器称之为SMTP服务器。(25)
2.POP3协议
同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通迅格式,POP3协议用于定义这种通讯格式。
因而,通常我们也把处理用户pop3请求(邮件接收请求)的邮件服务器称之为POP3服务器。(110)
下图用于演示两帐户相互发送邮件的过程
packagecn.e.dlmu.send;
importjava.util.Properties;
importjavax.activation.DataHandler;
importjavax.activation.FileDataSource;
importjavax.mail.Message;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;
importjavax.mail.internet.MimeUtility;
publicclassSendMail{
publicstaticvoidmain(String[]args)throwsException{
Propertiesprop=newProperties();
//连接的邮件服务器的主机名
prop.setProperty("mail.smtp.host","smtp.sina.com.cn");
//发送邮件的协议
prop.setProperty("mail.transport.protocol","smtp");
//是否向邮件服务器提交认证
prop.setProperty("mail.smtp.auth","true");
//创建session
Sessionsession=Session.getInstance(prop);
session.setDebug(true);
//得到transport
Transportts=session.getTransport();
//连接邮件服务器
ts.connect("smtp.sina.com.cn","[email protected]","xxxxx");
//发送邮件
MimeMessagemessage=createMessage(session);
ts.sendMessage(message,message.getAllRecipients());
ts.close();
}
(Sessionsession)throwsException{
MimeMessagemessage=newMimeMessage(session);
//设置邮件的基本信息
message.setFrom(newInternetAddress("[email protected]"));
message.setRecipient(Message.RecipientType.TO,newInternetAddress("[email protected]"));
message.setSubject("test");
//正文
MimeBodyParttext=newMimeBodyPart();
//设置charaset可以解决中文正文的乱码问题,内嵌可下载的图片
text.setContent("你好xxx,<imgsrc='c:/dog.jpg'/>测试成功!<br/><imgsrc='cid:aaa.jpg'/>","text/html;charset=gbk");
//图片1
MimeBodyPartimage=newMimeBodyPart();
image.setDataHandler(newDataHandler(newFileDataSource("src/88.jpg")));
image.setContentID("aaa.jpg");
//附件
MimeBodyPartattach=newMimeBodyPart();
DataHandlerdh=newDataHandler(newFileDataSource("src/javamail架包.jar"));
attach.setDataHandler(dh);
//解决文件中文乱码问题
attach.setFileName(MimeUtility.encodeText(dh.getName()));
//描述正文和图片的关系
MimeMultipartmp=newMimeMultipart();
mp.addBodyPart(text);
mp.addBodyPart(image);
mp.setSubType("related");
//描述正文和附件
MimeMultipartmp2=newMimeMultipart();
mp2.addBodyPart(attach);
//将正文封装为一个body
MimeBodyPartcontent=newMimeBodyPart();
content.setContent(mp);
mp2.addBodyPart(content);
mp2.setSubType("mixed");
message.setContent(mp2);
message.saveChanges();
returnmessage;
}
}