据我自己实验的结果,邮件服务器使用smtp.163.com和smtp.yeah.net都可以,但是我直接使用smtp.qq.com和smtp.sina.com貌似都不行,不过收件地址qq和sina都可以用,大家要是需要测试的话,不妨去网易注册一个新用户,直接就可以用了,我刚新注册了一个163邮箱,可用。
经过网上查询并经过本人测试,sina和qq需要先在邮箱中开启pop3/smtp服务才能够发邮件,具体办法为进入邮箱:“设置”->“开启”pop3/smtp服务。
在使用测试本程序是需要两个jar包,mail.jar和activation.jar,可以在网搜索也可在本文末尾直接下载。
本程序能够实现发送邮件并添加附件的功能。
import java.io.Serializable;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;
/**
* 实现一个java发送邮件的对象
* @author wangping1213
*
*/
public class Mail implements Serializable {
private static final long serialVersionUID = -3079057603211605487L;
/**
* MIME邮件对象
*/
private MimeMessage mimeMsg;
/**
* 邮件会话对象
*/
private Session session;
/**
* 系统属性
*/
private Properties props;
/**
* smtp是否需要认证
*/
private boolean needAuth = false;
/**
* smtp认证的用户名
*/
private String username = "";
/**
* smtp认证的密码
*/
private String password = "";
/**
* Multipart(抽象类)对象,
* 保存电子邮件内容的容器是Multipart抽象类,
* 它定义了增加和删除及获得电子邮件不同部分内容的方法.
*/
private Multipart mp;
/**
* 在构造Mail对象时的初始化工作
* @param smtp
*/
public Mail(String smtp) {
//设置SMTP主机(SMTP服务器)
setSmtpHost(smtp);
//创建一个邮件对象
createMimeMessage();
}
/**
* 设置SMTP主机
* @param hostName
*/
public void setSmtpHost(String hostName) {
System.out.println("设置系统属性:mail.stmp.host=" + hostName);
if (null == props) {
//获得系统属性对象
props = System.getProperties();
//设置SMTP主机
props.put("mail.smtp.host", hostName);
} //end if
}//end setSmtpHost
/**
* 创建MIME邮件对象
*/
public boolean createMimeMessage() {
try {
System.out.println("准备获取邮件会话对象!");
//获取邮件会话对象,需要一个授权抽象类的实现类
session = Session.getDefaultInstance(props, new Authenticator() {
//重写这个方法,这是授权类内部的要求
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
} catch (Exception e) {
System.err.println("获取邮件会话对象时发生错误!" + e);
return false;
}//end try-catch
System.out.println("准备创建MIME邮件对象");
try {
//创建MIME邮件对象
mimeMsg = new MimeMessage(session);
//创建一个multipart对象
mp = new MimeMultipart();
return true;
} catch (Exception e) {
System.err.println("创建MIME邮件对象失败!" + e);
return false;
} //end try-catch
} //end createMimeMessage()
/**
* 设置是否需要smtp身份认证
* @param need 是否需要身份认证
*/
public void setNeedAuth(boolean needAuth) {
System.out.println("设置smtp身份认证:mail.smtp.auth = " + needAuth);
if (null == props) { //判断是否已经取得系统属性对象
//取得系统属性对象
props = System.getProperties();
}// end if
//是否需要认证
this.needAuth = needAuth;
//设置是否需要认证
props.put("mail.smtp.auth", "" + this.needAuth);
}// end setNeedAuth()
/**
* 设置用户名和密码
* @param name 用户名
* @param pass 密码
*/
public void setNamePass(String name, String pass) {
System.out.println("程序得到用户名和密码");
//设置用户名和密码
username = name;
password = pass;
}// end setNamePass
/**
* 设置邮件主题
* @param mailSubject
* @return
*/
public boolean setSubject(String mailSubject) {
System.out.println("设置邮件主题!");
try {
//将邮件主题添加到邮件对象中
mimeMsg.setSubject(mailSubject);
return true;
} catch (MessagingException e) {
System.err.println("设置邮件主题错误!");
return false;
}//end try-catch
}//end setSubject()
/**
* 设置邮件体格式
* @param mailBody 邮件体
* @return 是否设置成功
*/
public boolean setBody(String mailBody) {
System.out.println("设置邮件体格式!");
//邮件体对象
BodyPart bp = new MimeBodyPart();
try {
//设置邮件体内容和格式
bp.setContent("<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>"
+ mailBody, "text/html;charset=utf-8");
//在multipart对象中添加邮件体对象
mp.addBodyPart(bp);
return true;
} catch (MessagingException e) {
System.err.println("设置邮件正文时发生错误!" + e);
return false;
}// end try-catch
}// end setBody()
/**
* 增加邮件附件
* @param filename 附件名称
* @return 是否添加成功
*/
public boolean addFileAffix(String filename) {
System.out.println("添加邮件附件!");
//邮件体对象
BodyPart bp = new MimeBodyPart();
//邮件附件源对象
FileDataSource fields = new FileDataSource(filename);
try {
//在邮件体对象中添加事件
bp.setDataHandler(new DataHandler(fields));
//在邮件体对象中设置附件名
bp.setFileName(fields.getName());
//在multipart对象中添加邮件体对象
mp.addBodyPart(bp);
return true;
} catch (MessagingException e) {
System.err.println("增加邮件附件" + filename + "发生错误! " + e);
return false;
}// end try-catch
}// end addFileAffix()
/**
* 设置发信人
* @param from 发信人
* @return 设置发信人是否成功
*/
public boolean setFrom(String from) {
System.out.println("设置发信人!");
try {
//在邮件对象设置发信人
mimeMsg.setFrom(new InternetAddress(from));
return true;
} catch (Exception e) {
System.err.println("设置发信人出错!" + e);
return false;
}// end try-catch
}// end setFrom()
/**
* 设置收信人
* @param to 收信人
* @return 设置收信人是否成功
*/
public boolean setTo(String to) {
System.out.println("设置收信人!");
try {
//在邮件对象中设置收信人
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
return true;
} catch (Exception e) {
System.err.println("设置收信人!" + e);
return false;
}// end try-catch
}// end setTo()
/**
* 发送附件到
* @param copyTo 发送附件的地址
* @return 发送附件是否成功
*/
public boolean setCopyTo(String copyTo) {
System.out.println("发送附件到");
if (null == copyTo) {
return false;
}//end if
try {
//在邮件对象中设置发送附件地址
mimeMsg.setRecipients(Message.RecipientType.CC,
(Address[]) InternetAddress.parse(copyTo));
return true;
} catch (Exception e) {
System.err.println("发送附件失败!" + e);
return false;
}// end try-catch
}// end setCopyTo()
/**
* 发送邮件
* @return 发送邮件是否成功
*/
public boolean sendout() {
try {
//邮件对象中设置multipart对象(内容体)
mimeMsg.setContent(mp);
//邮件对象保存更新
mimeMsg.saveChanges();
System.out.println("正在发送邮件...");
session.setDebug(true);
//发送信息类,使用Session类的getTransport方法,并使用smtp协议
Transport transport = session.getTransport("smtp");
//连接服务器,使用用户名,密码
transport.connect(props.getProperty("mail.smtp.host"), username, password);
//设置邮件对象
transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
System.out.println("发送邮件成功!");
//关闭传输对象
transport.close();
return true;
} catch (MessagingException e) {
System.err.println("邮件发送失败!" + e);
return false;
}// end try-catch
}// end sendout()
/**
* main方法
* @param args 参数
*/
public static void main(String[] args) {
//实体内容
String mailBody = "<font color='red'>欢迎光临</font><a href='www.baidu.com'>我的邮件测试</a>";
//邮件实体
Mail theMail = new Mail("smtp.163.com");
//设置验证
theMail.setNeedAuth(true);
//设置主题
if (theMail.setSubject("邮件测试") == false) {
return;
}// end if
//邮件内容,支持html如<font color='red'>欢迎光临</font><a href='#'>邮件测试</a>
if (theMail.setBody(mailBody) == false) {
return;
}// end if
//设置发件人
if (theMail.setFrom("发件人@163.com") == false) {
return;
}// end if
//设置收件人
if (theMail.setTo("收件人@qq.com") == false) {
return;
}// end if
//添加附件
if (theMail.addFileAffix("附件的地址") == false) {
return;
}// end if
//设置发件人的用户名和密码
theMail.setNamePass("发件人用户名", "发件人密码");
//发送邮件
if (theMail.sendout() == false) {
return;
}// end if
}// end main()
}//end class Mail
分享到:
相关推荐
使用 JavaMail 库可以轻松地在 Java 应用程序中发送电子邮件。JavaMail 是一个 Java API,用于在 Java 应用程序中发送和接收电子邮件。它提供了一个抽象层,允许开发者使用不同的电子邮件协议,例如 SMTP、POP3 和 ...
JavaMail API 是一套标准的Java接口,用于处理SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等邮件服务。它不仅支持文本邮件,还支持HTML邮件、附件、多部分消息以及S/MIME和PGP安全...
最后,使用 `Transport.send()` 方法将邮件发送出去。 接收邮件时,我们通常使用 IMAP 协议,因为它支持离线模式,并且可以管理邮箱中的邮件状态,比如未读或已读。创建 `Store` 对象后,通过 `getStore("imap")` ...
JavaMail 是一个开源的 Java 库,用于处理电子邮件的发送和接收。它提供了与 SMTP、POP3 和 IMAP 协议交互的接口,是开发基于 Java 的电子邮件应用的基础。回执邮件是邮件服务中的一项功能,它允许发件人在发送邮件...
使用JavaMail API的内容会涵盖实际的代码示例,比如如何创建和发送简单的文本邮件、带有附件的邮件,以及如何接收和读取邮件。这部分还会涉及到认证机制,如如何设置用户名和密码进行SMTP身份验证,以及SSL/TLS安全...
在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将详细探讨这些问题的原因及相应的解决方案。 ##...
本文将深入探讨如何使用JavaMail进行简单邮件发送,以及其支持的配置和附件功能。 首先,发送邮件的基本流程涉及到以下几个步骤: 1. **配置邮件会话**:JavaMail API中的`Properties`类用于存储邮件服务器的相关...
通过以上步骤,你就可以使用JavaMail API在Java应用程序中发送邮件了。提供的源码应该包含了完整的实现,你可以根据自己的需求进行修改和调试。记得在实际应用中,为了安全起见,应避免在代码中硬编码敏感信息,如...
在`test.java`文件中,你可以看到这些步骤的实现,通过运行该文件进行邮件发送的测试。请注意,为了安全起见,实际应用中不应硬编码敏感信息如用户名和密码,而应使用环境变量或配置文件。 总的来说,JavaMail提供...
JavaMail是一种广泛使用的Java库,用于在应用程序中发送电子邮件。这个标题"JavaMail发送邮件(文本、html、附件)"涵盖了使用JavaMail API发送不同格式邮件的核心功能。下面将详细介绍如何利用JavaMail发送文本、...
JavaMail 是一个强大的开源库,专门用于在Java应用程序中发送和接收电子邮件。它提供了丰富的API,使得开发者可以方便地处理SMTP、POP3...通过熟练掌握JavaMail的API和使用方法,可以轻松地在Java应用中集成邮件功能。
使用`Transport.send(Message)`方法可完成邮件发送。 4. **Address**: 用于表示邮件地址,包括发件人(`From`)、收件人(`To`)、抄送人(`Cc`)和密送人(`Bcc`)。`InternetAddress`类是处理这些地址的工具。 5...
这涉及到JavaMail API的使用,如`Session`对象用于配置邮件服务器连接参数,`Message`对象代表一封邮件,`Transport`类则负责实际的邮件发送操作。收邮件时,会通过`Store`对象连接到邮件服务器,获取`Folder`并读取...
JavaMail 是一个强大的开源库,专门用于在Java应用程序中实现电子邮件的发送和接收。它支持多种邮件协议,如SMTP(简单邮件传输协议)用于发送邮件,IMAP(因特网消息访问协议)和POP3(邮局协议)用于接收邮件。在...
JavaMail API是Java平台中的一个标准扩展库,用于发送、接收以及管理电子邮件。它提供了丰富的接口来实现邮件的各种操作,如构建复杂的MIME消息、处理附件等。 #### 二、使用JavaMail收发Gmail邮件 在使用JavaMail...
JavaMail API是Java平台上用于处理电子邮件的一套强大的库,它为开发者提供了丰富的功能,使得在应用程序中发送和接收邮件变得简单。本文将深入探讨JavaMail API的各个方面,帮助你理解和掌握这一关键工具。 首先,...
在使用JavaMail进行邮件发送时,如果邮件服务器配置了SSL/TLS,我们需要在代码中启用相应的安全设置。 在`SendMail.java`中,我们需要设置以下关键参数: 1. `Properties props`:这是一个属性对象,用来存储连接...
在本文中,我们将深入探讨如何使用JavaMail来实现这些功能,并通过一个名为"mail4j"的简单封装示例来展示其实现过程。 首先,我们需要引入JavaMail相关的依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ...
Java/javamail发送邮件是Java...总的来说,这些文件覆盖了Java Web开发的多个主题,包括邮件发送、Ajax、MVC模式、数据对象、Excel操作以及客户端脚本语言JavaScript。学习这些内容有助于提升你的Java全栈开发能力。
不过,需要注意的是,使用JavaMail发送邮件时,必须确保你的SMTP服务器允许第三方应用程序进行授权,并且可能需要开启“不够安全的应用”的权限(对于Gmail而言)。 在提供的压缩包文件`Mail`中,可能包含了一些...