JAVA简单邮件发送客户端程序设计
武汉长江工商学院工学院项目名称:简单邮件发送客户端程序设计学生姓名:学号:班级:指导老师:年月日目录.设计概述电子邮件(,简称,标志:,也被大家昵称为“”)又称、电子邮政,它是—种用电子手段提供信息交换的通信方式。
是应用最广的服务:通过网络的,用户可以用非常低廉的价格(不管发送到哪里,都只需负担电话费和网费即可),以非常快速的方式(几秒钟之内可以发送到世界上任何你指定的目的地),与世界上任何一个角落的网络用户联系,这些电子邮件可以是文字、图像、声音等各种方式。
同时,用户可以得到大量免费的新闻、专题邮件,并实现轻松的信息搜索。
电子邮件的处理有两大部分组成:电子邮件在上发送和接收的原理可以很形象地用我们日常生活中邮寄包裹来形容:当我们要寄一个包裹时,我们首先要找到任何一个有这项业务的邮局,在填写完收件人姓名、地址等等之后包裹就寄出而到了收件人所在地的,那么对方取包裹的时候就必须去这个邮局才能取出。
同样的,当我们发送电子邮件时,这封邮件是由邮件发送(任何一个都可以)发出,并根据收信人的地址判断对方的邮件接收服务器而将这封信发送到该服务器上,收信人要收取邮件也只能访问这个服务器才能完成。
本系统使用作为开发工具,开发一个电子邮件发送端应用程序。
系统实现的功能主要有帐号设置,发送及添加附件,托盘程序等。
本例发送程序采取了与发送邮件服务器连接实现电子邮件的发送。
用户在“收件人邮箱”所对应的对话框中输入收件人的地址,并在账号设置窗口所对的对话框中输入发信人的地址,设置好账号后,进入主对话框编辑信件的正文(本程序还可以发送附件,直接选择路径,就可以发送附件),然后单击“发送”按钮,便可完成电子邮件的发送。
电子邮件发送成功,程序将弹出一个“发送成功”的消息对话框;若电子邮件发送失败,程序将给出失败的相关信息。
.电子邮件发送协议与技术协议简介及通讯模型(: )即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(),此环境可以包括一个网络,几个网络或一个网络的子网。
理解到传送系统(或)不是一对一的是很重要的。
进程可能直接和其它进程通过已知的通信。
邮件是一个应用程序或进程间通信。
邮件可以通过连接在不同上的进程跨网络进行邮件传送。
更特别的是,邮件可以通过不同网络上的主机接力式传送。
协议属于/协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。
通过协议所指定的服务器,我们就可以把-寄到收信人的服务器上了,整个过程只要几分钟。
服务器则是遵循协议的发送邮件服务器,用来发送或中转你发出的电子邮件。
是一种提供可靠且有效电子邮件传输的协议。
是建模在文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。
独立于特定的传输子系统,而且仅要求一条可以保证传送数据单元顺序的通道且只需要可靠有序的数据流信道支持。
重要特性之一是其能跨越网络传输邮件,即“ 邮件中继”。
通常,一个网络可以由公用互联网上可相互访问的主机、防火墙分隔的网络上可相互访问的主机,及其它中的主机利用非传输层协议组成。
使用,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。
在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。
域名服务系统()的邮件交换服务器可以用来识别出传输邮件的下一跳地址。
在传输文件过程中使用号端口。
可大致用下面的图来表示。
图通信模型介绍一般情况下,在中,电子邮件程序的编写是主要是利用扩展包等及相关的等通信协议来实现的。
随着现代软件业的发展,提供了方便、简易、与服务器无关且稳固的电子邮件处理组件,使我们可以在程序开发语言中调用这些组件,利用很简单的语言实现功能强大的程序。
便是一个很好的电子邮件程序开发扩展组件。
是读取、撰写、发送电子信息的可选包。
我们可用它来建立如、、一般的邮件用户代理程序( ,简称)。
而不是像或者其它的邮件传输代理(,简称)程序那样可以传送、递送、转发邮件。
从另外一个角度来看,我们这些电子邮件用户日常用程序来读写邮件,而依赖着处理邮件的递送。
核心类:、、、、、、。
类:定义了基本的邮件会话。
就像会话那样,我们进行收发邮件的工作都是基于这个会话的。
对象利用了对象获得了邮件服务器、用户名、密码信息和整个应用程序都要使用到的共享信息。
类:当我们建立了对象后,便可以被发送的构造信息体了。
在这里提供了类型来帮助开发者完成这项工作。
由于是一个抽象类,大多数情况下,我们使用这个子类,该类是使用类型、信息头的邮箱信息。
信息头只能使用字符,而非字符将通过编码转换为的方式使用。
类:到这里,我们已经建立了和,下面将介绍如何使用邮件地址类:。
像一样,类也是一个抽象类,所以我们将使用这个子类。
类:像类那样,通过使用授权者类()以用户名、密码的方式访问那些受到保护的资源,在这里“资源”就是指邮件服务器。
在包中可以找到这个的授权者类()。
类:在发送信息时,类将被用到。
这个类实现了发送信息的协议(通称为),此类是一个抽象类,我们可以使用这个类的静态方法()来发送消息:();和类:接收邮件和发送邮件很类似都要用到。
但是在获得后,我们需要从中获取特定类型的,然后连接到,这里的代表了存储邮件的邮件服务器。
在连接的过程中,极有可能需要用到用户名、密码或者。
.邮件发送客户端程序总体设计系统模块结构电子邮件客户端主要由以下三个模块构成:发送邮件模块、系统托盘模块、账号设置模块。
其功能模块如图所示:图电子邮件功能模块图)发送邮件模块:发送邮件,并可以添加附件。
)账号设置模块:对发送方电子邮件账号进行设置。
)系统托盘模块:在任务栏可以使程序有托盘功能。
类的功能设计系统托盘类{该类为系统托盘类,为了实现邮件程序的托盘功能。
(); 系统托盘菜单数组。
[] { ("账号设置") ("退出程序") }; 点击鼠标邮件的菜单数组 ;表示桌面的系统托盘对象。
; 对象表示可以添加到的托盘图标。
可以包含工具提示(文本)、图像、弹出菜单和一组与之关联的侦听器。
; 表示创建一个邮件发送类。
() 该方法表示一个托盘类的构造。
( ) 该方法表示鼠标触发事件,其中的参数为监视器变量。
}账号设置类{该类为账号设置类,主要实现了邮件系统的账号功能。
; 表示创建一个邮件发送类。
; 表示创建用户密码的短文本字符串的显示区。
; 表示创建用户账号的输入区。
; 表示创建一个按钮。
; 表示创建一个密码输入区。
; 表示创建用户账号的短文本字符串的显示区。
( ) 该方法表示账号设置类的一个构造() 该方法表示一个图形界面的初始化。
( )该方法以及接后的几个类似的方法都表示鼠标触发事件。
}邮件发送类{该类为邮件发送类,主要是实现了邮件发送等功能。
; 登录对话框; 附件路径; 发件人邮箱地址; 发件人邮箱密码; 是否已登录; 显示发件人;;; 邮件状态; 是否有附件; 添加附件; 前面的邮箱地址; 后面的邮箱地址; 主题; 内容; 分割线() 图形界面的初始化方法密码输入方法( )邮件发送的详细方法( )邮件地址确认方法( )添加附件的方法}.功能模块的实现程序主界面的设计本次设计中,主要用到对话框图形界面。
图形界面是实现应用程序人机交互的重要组成部分。
它不但可以实现数据流的输入和输出,而且也可以移动和关闭对话框。
.创建类.首先,创建类,此类继承类。
.创建方法首先,设置窗口关闭方法,调用()方法。
然后设置布局。
对各个图形组件进行创建。
主界面的实现如图,创建一个图形界面,有输入框,输入监视器,还有各个按钮等。
方便用户可以使用系统。
图图形界面的创建与实现图账号设置功能实现在账号设置时新建一个类,此类包含了,鼠标触发事件,以及账号名,密码与邮件服务器的验证。
在用户输入账号时会进行账号名检测,查看输入的账号格式是否有误,若有误,则返回重新输入。
账号设置流程图如图,账号设置会在输入账号时检验合法性,然后等待主界面调用并提取账号。
图账号设置流程图部分此类代码如下:() {{{("账号设置");()();}(, , , );}( ) {(("")) {(("")) {"";} (("")) {"";} {" ";}} {" ";};}邮件发送功能实现邮件发送流程图如图,发送邮件时会对邮件以及账号进行处理和验证。
图邮件发送流程图)获取收件人账号,并设置邮件服务器(程序会检测输入账号合法性)。
关键代码:()() ""()() 获得收件人地址();();();();设置邮件服务器:(());(" " ) {(, "无法解析邮箱地址!");();}();("", );("", "");服务器需要验证:("", "");("", "");("", "");)获取账号设置界面中用户输入的账号和密码传入服务器,然后创建一封新邮件。
关键代码:传入用户名和口令:(,(, ));();创建新邮件:();( ());(, (, ));();();( ());)邮件发送以及发送失败的详细信息和原因。
关键代码:();("");();();( ());(());();();();();(" !");("发送成功!");();(());} ( ) {(, "发送邮件失败!");("邮件发送失败的原因是:" ());("具体的错误原因");();附件发送实现添加附件流程图如图,当用户点击“添加附加”按钮时,会弹出图形界面,方便用户选择附件路径,附件与邮件一起发送。
图添加附件流程图新建一个对象,然后调用对象的方法。
关键代码:();("打开文件夹");( (" "));() 支持多个附件();( ) {()();();(()());}(());; 有附件系统托盘实现系统托盘流程图如图,功能为当用户点击键时,本系统最小化到托盘,然后当用户双击托盘图标时又出现主界面。
图系统托盘流程图在本程序中添加了系统托盘功能,使用了中新增加的类和类创建系统托盘,并在托盘上增加了鼠标邮件菜单。
javamail收发邮件(带附件,正文带图)
1.邮件1.1 邮件组成部分如果是新邮件就获取,并解析它;邮件是由邮件头和邮件体组成,在邮件头中主要包含了收件人、发件人、主题等等基础信息。
而邮件体中就包括了邮件的正文和附件等内容信息。
下图就是pop3协议下,邮件的大致内容。
1.2 发送邮件(带附件、正文带图片)QQ邮箱为例:需要QQ账号和QQ登录第三方客户端时,密码框的“授权码”(相当于密码)授权码如下获取:代码如下:public class JavaMailboxAttachment {private MimeMessage message;private Session session;private String mailHost = "";private String mailAuth = "";private String mailPort = "";private String sender_username = "";private String sender_password = "";//定义一个Properties 用于存放信息private Properties properties = new Properties();//-------------------------------发信箱---------------------------------------------public JavaMailboxAttachment(String email_type) {try {properties.put("mail.smtp.host",""); //发送邮件服务器//端口号,QQ邮箱给出了两个端口,但是另一个我一直使用不了,所以就给出这一个587properties.put("mail.smtp.port", "587"); //发送邮件端口号properties.put("mail.smtp.auth", "true");// 此处填写你的账号properties.put("er", "xxxxxxxxx@");// 此处的密码就是前面说的16位STMP授权码properties.put("mail.password", "xxxxxxxxxxxxxxxx");this.mailHost = properties.getProperty("mail.smtp.host");this.mailAuth = properties.getProperty("mail.smtp.auth");this.mailPort = properties.getProperty("mail.smtp.port");this.sender_username = properties.getProperty("er");this.sender_password = properties.getProperty("mail.password");} catch (Exception e) {e.printStackTrace();}// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName = properties.getProperty("er");String password = properties.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};session = Session.getInstance(properties,authenticator); //用户验证message = new MimeMessage(session); //将验证成功的session信息,创建一个message 对象。
Java实现outlook服务的邮件发送
Java实现outlook服务的邮件发送依赖<!-- https:///artifact/javax.mail/mail --><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version></dependency>POP3接收String USER_NAME ="*****@";String PASSWORD = "******";public static void receivepop3Email() {String host = "";// change accordinglyString mailStoreType = "pop3";String popPort = "995";Store store = null;// 配置连接信息Properties properties = new Properties();properties.put("mail.store.protocol", mailStoreType);properties.put("mail.pop3.host", host);properties.put("mail.pop3.port", popPort);properties.put("mail.pop3.starttls.enable", "true");try {Session emailSession = Session.getDefaultInstance(properties);//打开调式模式,可看到邮件发送过程中各步骤的详细信息// emailSession.setDebug(true);store = emailSession.getStore("pop3s");store.connect(host, USER_NAME, PASSWORD);Folder emailFolder = store.getFolder("INBOX");emailFolder.open(Folder.READ_ONLY);Message[] messages = emailFolder.getMessages();for (Message msg:messages) {System.out.println(msg.getSubject());}emailFolder.close(true);store.close();} catch (NoSuchProviderException e) {e.printStackTrace();} catch (MessagingException e) {e.printStackTrace();}finally {if(null != store){try {store.close();} catch (MessagingException e) {e.printStackTrace();}}}}IMAP接收String USER_NAME ="*****@";String PASSWORD = "******";public static void receiveimapEmail() {String host = "";// change accordinglyString mailStoreType = "imap";String popPort = "993";try {// 配置连接信息Properties properties = new Properties();properties.put("mail.store.protocol", mailStoreType);properties.put("mail.imap.host", host);properties.put("mail.imap.port", popPort);properties.put("mail.imap.starttls.enable", "true");Session emailSession = Session.getDefaultInstance(properties);// emailSession.setDebug(true);Store store = emailSession.getStore("imaps");store.connect(host, USER_NAME, PASSWORD);Folder emailFolder = store.getFolder("INBOX");emailFolder.open(Folder.READ_ONLY);Message[] messages = emailFolder.getMessages();for (Message msg:messages) {System.out.println(msg.getSubject());}emailFolder.close(true);store.close();} catch (NoSuchProviderException e) {e.printStackTrace();} catch (MessagingException e) {e.printStackTrace();}}SMTP发送static String USER_NAME ="****@";static String PASSWORD = "****";public static boolean sendSMTPMail(String to, String text, String title) {String host = "";String mailStoreType = "smtp";String popPort = "587";final Properties props = new Properties();props.put("mail.smtp.auth", "true");props.put("mail.smtp.host", host);props.put("mail.store.protocol", mailStoreType);props.put( "mail.smtp.port", popPort );//开启SSLprops.put("mail.smtp.starttls.enable", "true");props.put("mail.smtp.socketFactory.port",popPort);props.put("mail.smtp.socketFactory.fallback","false");try {Session session = Session.getDefaultInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(USER_NAME, PASSWORD);//账号密码}});session.setDebug(true);// 创建邮件消息MimeMessage message = new MimeMessage(session);// 设置发件⼈InternetAddress form = new InternetAddress(USER_NAME);message.setFrom(form);// 设置收件⼈InternetAddress toAddress = new InternetAddress(to);message.setRecipient(Message.RecipientType.TO, toAddress);// 设置邮件标题message.setSubject(title);// 设置邮件的内容体message.setContent(text, "text/html;charset=UTF-8");// 发送邮件Transport.send(message);return true;} catch (Exception e) {e.printStackTrace();}return false;}插曲: SMTP发送邮件时,第⼀次发送可能会收到如下的报错:OutboundSpamException; Failed to process message due to a permanent exception with message WASCL UserAction verdict is not None 在⽹上查到这是邮箱⼚商的安全策略,出现此异常的同时⼚商会给你发送⼀封确认邮件,只要你登录邮箱并激活该邮件即可使⽤SMTP 发送邮件的功能,邮件内容⼤致如下:。
基于Javamail的邮件收发系统-开题报告
3.2性能需求
3.2.1系统安全性
3.2.2系统灵活性和可维护性
3.3数据库选择
3.4系统运行环境
4.系统实现
4.1系统环境配置
4.1.1所涉及的软件及补丁
4.1.2软件的安装
4.பைடு நூலகம்帐号申请模块
4.3用户登入认证模块
4.4邮件发送模块
4.4.1发送普通邮件
4.4.2发送带多附件邮件
(1)开发工具采用Java+JavaMail API。
(2)数据库采用SQL Server 2000。
实验方案:
(1)邮件服务器的工作原理。
(2)DNS服务器的工作原理。
(3)SMTP、POP3、MIME协议。
(4)设计并实现基于Javamail的邮件收发系统,要求系统具有邮件接收、发送等基本功能。
[9] Java program design。Cohoon, James P.,Davidson, Jack W。McGraw-Hill Higher Education, 2004。
[10] Thinking in Java。Eckel, Bruce。Prentice Hall, c2000。
[11] Learning Java。Niemeyer, Patrick.,Knudsen, Jonathan。O'Reilly, 2000。
邮件系统市场是个刚刚形成的市场,格局还有很大的变数。同时企业用户对邮件系统产品的各项性能不太熟悉,在对邮件系统的好坏没有很清晰的评判标准时,往往很注重系统提供商的成功案例,也就是系统提供商的业界背景。企业购买邮件系统主要是为了提高办公效率,所以力图控制成本。用户需要更标准的产品以减小整体拥有成本。产品整体化可为企业维护降低成本,但需要更容易定制化来满足用户个性化需求。另外,不同的ISP需要个性化的标志以区别同类产品,价格和产品性能同为企业用户购买时的重要参照。
imap 协议 java代码
imap 协议 java代码为你提供一个用 Java 编写的简单的 IMAP 客户端示例,用于连接并读取 Gmail 邮箱中的邮件:```javaimport java.io.UnsupportedEncodingException;import java.util.Date;import java.util.Properties;import javax.mail.Authenticator;import javax.mail.FetchProfile;import javax.mail.Folder;import javax.mail.Message;import javax.mail.Message.RecipientType;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Store;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeUtility;public class EmailUtil {private String username = null;private String password = null;// 传入自己的邮箱用户名和密码public EmailUtil(String username, String password) {ername = username;this.password = password;}// 创建连接会话public Session createSession(Properties props) {Session session = Session.getInstance(props, new Authenticator() { // 返回用户名密码认证@Overridepublic PasswordAuthentication getPasswordAuthentication() {PasswordAuthentication pa = new PasswordAuthentication(username, password);return pa;}});return session;}// 发送邮件(需设置 SMTP)public void sendMail(Properties props, SendEmailMessage sem) throws Exception {Session session = createSession(props);// 消息Message msg = new MimeMessage(session);msg.setFrom(InternetAddress.parse(MimeUtility.decodeText(sem.getFrom())));msg.setRecipients(RecipientType.TO,InternetAddress.parse(sem.getRecipient()));msg.setSubject(sem.getSubject());msg.setText(sem.getText());msg.setSentDate(new Date());// 发送消息Transport.send(msg);}// 接收邮件(需设置 POP3 或 SAMP)public void receiveMail(Properties props, String protocol) throwsException {Session session = createSession(props);Store store = session.getStore(protocol);store.connect();// 连接Folder inbox = store.getFolder("INBOX");// 进入根目录inbox.open(Folder.READ_WRITE);// 只读方式FetchProfile profile = new FetchProfile();profile.add(FetchProfile.Item.ENVELOPE);// 获取信封Message[] msgs = inbox.getMessages();// 得到所有邮件inbox.fetch(msgs, profile);// 预获取信息// 打印for (int i = 0; i < msgs.length; i++) {System.out.println("发送时间:" + msgs[i].getSentDate());System.out.println("发送人:" + decodeText(msgs[i].getFrom()(0).toString()));System.out.println("大小:" + msgs[i].getSize());System.out.println("标题:" + msgs[i].getSubject());}}private String decodeText(String text) {try {return MimeUtility.decodeText(text);} catch (UnsupportedEncodingException e) {e.printStackTrace();return null;}}}```在上述代码中,首先定义了一个`EmailUtil`类,在类中创建`createSession`方法,用于创建邮件会话。
javamaven项目实现发送邮件
javamaven项⽬实现发送邮件1,先导⼊⼀个jar包在pom.xml 中写⼊<!-- 邮件start --><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version></dependency><!-- 邮件end -->2,写⼀个邮件的类包括,发送内容,端⼝等public class MailSenderInfo {// 发送邮件的服务器的IP和端⼝private String mailServerHost;private String mailServerPort = "25";// 邮件发送者的地址private String fromAddress;// 邮件接收者的地址private String toAddress;// 登陆邮件发送服务器的⽤户名和密码private String userName;private String password;// 是否需要⾝份验证private boolean validate = false;// 邮件主题private String subject;// 邮件的⽂本内容private String content;// 邮件附件的⽂件名private String[] attachFileNames;private String iwallHost ;/*** 获得邮件会话属性*/public Properties getProperties(){Properties p = new Properties();p.put("mail.smtp.host", this.mailServerHost);p.put("mail.smtp.port", this.mailServerPort);p.put("mail.smtp.auth", validate ? "true" : "false");return p;}public String getMailServerHost() {return mailServerHost;}public void setMailServerHost(String mailServerHost) {this.mailServerHost = mailServerHost;}public String getMailServerPort() {return mailServerPort;}public void setMailServerPort(String mailServerPort) {this.mailServerPort = mailServerPort;}public boolean isValidate() {return validate;}public void setValidate(boolean validate) {this.validate = validate;}public String[] getAttachFileNames() {return attachFileNames;}public void setAttachFileNames(String[] fileNames) {this.attachFileNames = fileNames;}public String getFromAddress() {return fromAddress;}public void setFromAddress(String fromAddress) {this.fromAddress = fromAddress;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getToAddress() {return toAddress;}public void setToAddress(String toAddress) {this.toAddress = toAddress;}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getContent() {return content;}public void setContent(String textContent) {this.content = textContent;}public String getIwallHost() {return iwallHost;}public void setIwallHost(String iwallHost) {this.iwallHost = iwallHost;}}3,为了可配置性,可将上⾯的类的所需信息写⼊配置⽂件⾥<bean id = "mailInfo" class = "xxxxxxx.MailSenderInfo" ><property name="mailServerHost" value = ""></property> <property name="mailServerPort" value = "25"></property><property name="fromAddress" value = "xxxxxxx@xx.xxx"></property><property name="userName" value = "xxxxxxxx"></property><property name="password" value = "xxxxx"></property><property name="iwallHost" value = "http://localhost:8080/xxxxx"></property> </bean>4,写⼀个简单的发送邮件的类,包含发送text或者 html的⽅法public class SimpleMailSender {/*** 以⽂本格式发送邮件* @param mailInfo 待发送的邮件的信息*/public boolean sendTextMail(MailSenderInfo mailInfo) {// 判断是否需要⾝份认证MyMailAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();if (mailInfo.isValidate()) {// 如果需要⾝份认证,则创建⼀个密码验证器authenticator = new MyMailAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); }// 根据邮件会话属性和密码验证器构造⼀个发送邮件的sessionSession sendMailSession = Session.getDefaultInstance(pro,authenticator);try {// 根据session创建⼀个邮件消息Message mailMessage = new MimeMessage(sendMailSession);// 创建邮件发送者地址Address from = new InternetAddress(mailInfo.getFromAddress());// 设置邮件消息的发送者mailMessage.setFrom(from);// 创建邮件的接收者地址,并设置到邮件消息中Address to = new InternetAddress(mailInfo.getToAddress());mailMessage.setRecipient(Message.RecipientType.TO,to);// 设置邮件消息的主题mailMessage.setSubject(mailInfo.getSubject());// 设置邮件消息发送的时间mailMessage.setSentDate(new Date());// 设置邮件消息的主要内容String mailContent = mailInfo.getContent();mailMessage.setText(mailContent);// 发送邮件Transport.send(mailMessage);return true;} catch (MessagingException ex) {ex.printStackTrace();}return false;}/*** 以HTML格式发送邮件* @param mailInfo 待发送的邮件信息*/public static boolean sendHtmlMail(MailSenderInfo mailInfo){// 判断是否需要⾝份认证MyMailAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();//如果需要⾝份认证,则创建⼀个密码验证器if (mailInfo.isValidate()) {authenticator = new MyMailAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); }// 根据邮件会话属性和密码验证器构造⼀个发送邮件的sessionSession sendMailSession = Session.getDefaultInstance(pro,authenticator);try {// 根据session创建⼀个邮件消息Message mailMessage = new MimeMessage(sendMailSession);// 创建邮件发送者地址Address from = new InternetAddress(mailInfo.getFromAddress());// 设置邮件消息的发送者mailMessage.setFrom(from);// 创建邮件的接收者地址,并设置到邮件消息中Address to = new InternetAddress(mailInfo.getToAddress());// Message.RecipientType.TO属性表⽰接收者的类型为TOmailMessage.setRecipient(Message.RecipientType.TO,to);// 设置邮件消息的主题mailMessage.setSubject(mailInfo.getSubject());// 设置邮件消息发送的时间mailMessage.setSentDate(new Date());// MiniMultipart类是⼀个容器类,包含MimeBodyPart类型的对象Multipart mainPart = new MimeMultipart();// 创建⼀个包含HTML内容的MimeBodyPartBodyPart html = new MimeBodyPart();// 设置HTML内容html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");mainPart.addBodyPart(html);// 将MiniMultipart对象设置为邮件内容mailMessage.setContent(mainPart);// 发送邮件Transport.send(mailMessage);return true;} catch (MessagingException ex) {ex.printStackTrace();}return false;}}5,在类中,实现发送邮件,建议另起线程发送邮件/*** 发送邮件内部类**/class SendEmailThread implements Runnable {private MailSenderInfo mailInfo;public SendEmailThread(MailSenderInfo mailInfo) {this.mailInfo = mailInfo;}@Overridepublic void run() {try {if (this.mailInfo != null) {SimpleMailSender.sendHtmlMail(mailInfo);}} catch (Exception e) {e.printStackTrace();}}}/*** 发送邮件⽅法** @param account* @param code*/public void sendEmail(String account, String code) {WebApplicationContext ac = ContextLoader.getCurrentWebApplicationContext();// 获取当前服务IPMailSenderInfo mailInfo = (MailSenderInfo) ac.getBean("mailInfo");mailInfo.setValidate(Boolean.TRUE);mailInfo.setToAddress(account);mailInfo.setSubject("验证码邮件");mailInfo.setContent("<p>您好!</p><p>感谢您注册成为xxxxxx⽤户!</p><p>您的验证码是:" + code + "。
java邮件发送(单人,多人,抄送,Excel附件)
java邮件发送(单⼈,多⼈,抄送,Excel附件) 直接上代码保存吧package com.westvalley.ceiec.page.report.sendmail;import weaver.email.EmailEncoder;import javax.mail.*;import javax.mail.internet.*;import javax.mail.util.ByteArrayDataSource;import javax.activation.*;import mons.logging.Log;import mons.logging.LogFactory;import ermodel.HSSFWorkbook;import crivia.db.i.DataSet;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.util.*;/**邮件发送⼯具类* @author whh*/public class Email {Log log = LogFactory.getLog(this.getClass());//发件⼈地址private String mail_from;public void setMail_from(String mailFrom) {mail_from = mailFrom;}public String getMail_from() {return mail_from;}//发件⼈密码private String password;public void setPassword(String password) {this.password = password;}public String getPassword() {return password;}//收件地址private String mail_to;public void setMail_to(String mailTo) {mail_to = mailTo;}public String getMail_to() {return mail_to;}//主题private String title;public void setTitle(String title) {this.title = title;}public String getTitle() {return title;}//内容private String message;public void setMessage(String message) {this.message = message;}public String getMessage() {return message;}//发件⼈邮件服务器如: 191.0.0.6private String send_server;public void setSend_server(String sendServer) {send_server = sendServer;}public String getSend_server() {return send_server;}/** 单个发送 setMail_to(String mailTo)* @return是否正确发送* @throws AddressException*/public boolean SendMail()throws AddressException{try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from); message.setFrom(from_address);//设置收件⼈InternetAddress to_address = new InternetAddress(this.mail_to);message.setRecipient(Message.RecipientType.TO, to_address);//设置主题message.setSubject(title);//设置内容message.setContent(this.message, "text/html;charset=UTF-8");//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("向"+this.mail_to+"发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.toString());return false;}}/**群发* @param addresses 地址list* @return* @throws AddressException*/public boolean SendMail(List<String> addresses) throws AddressException{ try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from); message.setFrom(from_address);//设置收件⼈,多个final int num = addresses.size();InternetAddress to_address[] = new InternetAddress[num];for(int i=0; i<num; i++){to_address[i] = new InternetAddress(addresses.get(i));}message.setRecipients(Message.RecipientType.TO, to_address);//设置主题message.setSubject(title);//设置内容message.setContent(this.message, "text/html;charset=UTF-8");//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.getMessage());return false;}}/** 多⼈发送并抄送增加:2017-04-25 whh* @param addresses 收件邮箱(多个)* @param ccAddresses 抄送邮箱(多个)* @return* @throws AddressException*/public boolean SendMail(List<String> addresses, List<String> ccAddresses) throws AddressException{if(0==ccAddresses.size()){ //20170428 whhreturn SendMail(addresses);}try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from);message.setFrom(from_address);//设置收件⼈,多个final int num = addresses.size();InternetAddress to_address[] = new InternetAddress[num];for(int i=0; i<num; i++){to_address[i] = new InternetAddress(addresses.get(i));}message.setRecipients(Message.RecipientType.TO, to_address);//设置抄送⼈final int ccSize = ccAddresses.size();if(ccSize > 0){InternetAddress cc_Address[] = new InternetAddress[ccSize];for(int i=0; i<ccSize; i++){cc_Address[i] = new InternetAddress(ccAddresses.get(i));}message.setRecipients(, cc_Address);}//设置主题message.setSubject(title);//设置内容message.setContent(this.message, "text/html;charset=UTF-8");//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.getMessage());return false;}}/** 多⼈发送并抄送增加:2019-06-14 whh* @param addresses 收件邮箱(多个)* @param ccAddresses 抄送邮箱(多个)* @param is 附件* @return* @throws AddressException*/public boolean SendMail(List<String> addresses, List<String> ccAddresses,HSSFWorkbook workBook,String workBookName) throwsAddressException{try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from);message.setFrom(from_address);//设置收件⼈,多个final int num = addresses.size();InternetAddress to_address[] = new InternetAddress[num];for(int i=0; i<num; i++){to_address[i] = new InternetAddress(addresses.get(i));}message.setRecipients(Message.RecipientType.TO, to_address);//设置抄送⼈final int ccSize = ccAddresses.size();if(ccSize > 0){InternetAddress cc_Address[] = new InternetAddress[ccSize];for(int i=0; i<ccSize; i++){cc_Address[i] = new InternetAddress(ccAddresses.get(i));}message.setRecipients(, cc_Address);}//附件ByteArrayOutputStream baos = new ByteArrayOutputStream();workBook.write(baos);baos.flush();byte[] bt = baos.toByteArray();InputStream is = new ByteArrayInputStream(bt, 0, bt.length);baos.close();/*添加正⽂内容*/Multipart multipart = new MimeMultipart();BodyPart contentPart = new MimeBodyPart();// contentPart.setText(this.message);// contentPart.setHeader("Content-Type", "text/html;charset=UTF-8");contentPart.setContent(this.message, "text/html;charset=UTF-8");multipart.addBodyPart(contentPart);/*添加附件*/MimeBodyPart fileBody = new MimeBodyPart();DataSource source = new ByteArrayDataSource(is, "application/msexcel"); fileBody.setDataHandler(new DataHandler(source));// 中⽂乱码问题fileBody.setFileName(MimeUtility.encodeText(workBookName+".xls"));multipart.addBodyPart(fileBody);//设置主题message.setSubject(title);//设置内容message.setContent(multipart);//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.getMessage());return false;}}/**邮箱初始化,发件⼈邮箱、密码及服务器信息的获取* @return正确获取时返回Email对象,否则为null*/public static Email intiEmail(){// Log log = LogFactory.getLog(this.getClass());Email email = new Email();//获取系统的邮箱信息DataSet data = SQL.select(SQL.sql_Array(" select defmailpassword" +",defmailserver,defmailfrom from SystemSet "));if(data.next()){//发件⼈邮箱地址email.setMail_from(data.get("defmailfrom"));//获取并解析邮箱密码email.setPassword(EmailEncoder.DecoderPassword(data.get("defmailpassword")));// ("Password:"+EmailEncoder.DecoderPassword(data.get("defmailpassword"))); //服务器信息email.setSend_server(data.get("defmailserver"));}if(email.getMail_from().equals("")||email.getPassword().equals("")||email.getSend_server().equals("")){// ("发送⼈邮箱错误");// ("From:"+email.getMail_from()+"Password:"+// email.getPassword()+"Server:"+email.getSend_server());return null;}return email;}}。
《Java程序设计》课程设计要求-南信大方巍
《Java程序设计》课程设计要求一、课程设计目的Java语言是目前IT行业应用最多,也是最主流的开发语言之一(另一主流是.NET),其应用前景很广。
Java语言本身主要用于开发桌面应用程序。
与此相对应,JSP、Servlet和JavaBean等是基于Java语言开发Web应用程序的技术。
本课程设计的任务就是使用Java或JSP、Servlet和JavaBean等组件开发一套桌面或Web应用程序。
本课程所涉及的知识量大,应用面广,需要结合课程设计这个实践环节来贯通学生所学的各方面的知识。
并在实际动手的过程中,进一步熟悉这门语言,以求能熟练应用,并扩展课堂所学的知识,达到提高学习效果的目的。
对于课堂上未学过的知识点,在课程设计过程中应通过查阅资料来了解和应用,同时在这个过程中培养学生独立分析问题和解决问题的能力,为今后的学习和应用建立良好的基础。
二、课程设计要求学生可在老师给定的几个任务选题中,选择难度适合自己的课题,通过自己对设计目标的理解,独立完成所选课题要求实现的功能目标,编写软件代码和设计报告。
也可以根据自己的兴趣自选题目,难度适中符合要求即可。
课设要求独立完成。
可相互讨论或查阅参考资料,但不得与他人雷同,不得直接从网上或其它地方抄袭代码。
验收时和最后提交代码后会进行是否抄袭的检验,发现雷同或抄袭者成绩为不及格。
三、课程设计参考选题同学们可从如下选题中选择题目来完成,选题一旦选定,不得随意变更。
并请注意同宿舍同班同学尽量不要集中选择某些题目。
对于学生成绩管理之类的普通性题目,验收时要求必须完成得比较完善。
对于相对来说有难度些的题目,验收时要求会相对低些,选题难度较高且完成得较好、完成的作品不大众化而是有自己的特色和创新之处等等,会获得更好的成绩。
严禁同一个选题的代码相似或雷同,否则成绩为不及格。
所有选题最终都必须设计成图形界面的程序、软件或系统。
功能越完善、越丰富、越有自己的特色与创新、越不与他人雷同,则成绩越高。
基于Javamail的邮件收发系统-任务书
信息科学与工程学院09 届本科生毕业设计(论文)任务书学院信息科学与工程学院专业计算机科学与技术(师范)班级学号学生姓名指导教师一、论文题目基于Javamail的邮件收发系统二、内容和要求1.总体目标及性能(参数)要求(1)系统功能基本完善。
(2)系统具有良好的用户界面。
(3)系统具有较好的人机交互性、易于使用。
(4)系统可靠、稳定,具有一定的应用价值。
2.研究内容及拟采用的技术路线●研究内容:(1)邮件服务器的工作原理。
(2)DNS服务器的工作原理。
(3)SMTP、POP3、MIME协议。
(4)设计并实现基于Javamail的邮件收发系统,要求系统具有邮件接收、发送等基本功能。
●采用的技术路线:(1)开发工具采用Java+JavaMail API。
(2)数据库采用MySQL或SQL Server。
3.参考文献(10篇以上)[1] Java邮件开发详解。
张孝祥。
电子工业出版社,2007。
[2] Java高级程序设计。
王路群主编。
中国水利水电出版社, 2006 。
[3] Java课程设计。
黄明, 梁旭, 周绍斌编著。
电子工业出版社, 2006。
[4] Java开发与应用教程。
王吴迪, 赵枫朝等编著。
电子工业出版社, 2006。
[5] Java程序设计大学教程。
刘艺等编著。
机械工业出版社, 2006。
[6] Java数据库高级编程宝典。
陈天河编著。
电子工业出版社, 2005。
[7] Java程序设计与应用开发。
於东军等编著。
清华大学出版社, 2005。
[8] Java语言程序设计实训。
赵海廷主编。
武汉大学出版社, 2005。
[9] Java program design。
Cohoon, James P.,Davidson, Jack W。
McGraw-Hill Higher Education, 2004。
[10] Thinking in Java。
Eckel, Bruce。
Prentice Hall, c2000。
java发送邮件及邮 件附件代码实例
Mail attachment = partSet.get(i);
String attachmentContent = attachment.getContent();
if (null != attachmentContent && 0 < attachmentContent.length()) {
*中查找其相应的MIME类型,如果没找到,则返回
* {@link #defaultAttachmentContentType}
*所指定的默认类型。
*
* @param fileName
*文件名
* @return返回文件对应的MIME类型。
*/
private String getPartContentType(String fileName) {
}
ret = contentTypeMap.get(fileName);
}
if (null == ret) {
ret = defaultAttachmentContentType;
}
return ret;
}
/**
*将给定字符串转换为base64编码的字符串
*
* @param str
*需要转码的字符串
contentTypeMap.put("doc", "application/msword");
contentTypeMap.put("dot", "application/msword");
contentTypeMap.put("docx", "application/msword");
开发一个简单的电子邮件客户端:实现收发邮件功能
开发一个简单的电子邮件客户端:实现收发邮件功能电子邮件客户端是一种用于收发电子邮件的应用程序或软件工具。
它通常具有用户界面,在其上用户可以编写、发送、接收、管理和存档电子邮件。
这些客户端可以在电脑、手机、平板电脑等设备上安装和使用。
在本文中,我将为您介绍如何开发一个简单的电子邮件客户端,实现收发邮件的基本功能。
这个客户端将使用简体中文编写,并提供齐全的用户界面和用户体验。
1.设计用户界面:首先,我们需要为电子邮件客户端设计一个用户界面。
界面应该简洁易用,并提供以下主要功能:-邮箱列表:显示用户的收件箱、发件箱、草稿箱、已发送等邮件类别。
-邮件列表:显示选定邮件类别中的邮件列表,包括发件人、主题、日期等信息。
-邮件预览:展示选定邮件的详细信息,包括发件人、主题、内容等。
-邮件撰写:用户可以在此处编写新的邮件,包括收件人、主题、内容等。
-邮件发送:用户可以点击发送按钮将邮件发送给收件人。
-邮件接收:客户端将定期检查服务器上是否有新邮件,并更新收件箱。
-邮件管理:用户可以对邮件进行管理操作,如删除、移动到其他文件夹等。
2.连接到邮件服务器:在开发电子邮件客户端之前,我们需要连接到一个邮件服务器。
可以选择使用现有的邮件服务器,如Gmail、Yahoo、163等,或者自己开发一个新的邮件服务器。
连接到邮件服务器需要使用远程通信协议,如POP3、IMAP、SMTP等。
- POP3(Post Office Protocol 3)是一种常用的电子邮件接收协议,用于从远程服务器接收邮件。
- IMAP(Internet Message Access Protocol)是另一种电子邮件接收协议,与POP3类似,但具有更强大的功能,如可以在多个设备上同步邮件、管理邮件夹等。
- SMTP(Simple Mail Transfer Protocol)是一种电子邮件发送协议,用于将邮件从客户端发送到服务器。
我们可以根据需求选择合适的协议,并使用相应的库或API连接到邮件服务器。
