「java邮件消息」java实现邮件发送功能代码

博主:adminadmin 2023-03-18 20:35:11 312

今天给各位分享java邮件消息的知识,其中也会对java实现邮件发送功能代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java.mailx群发送邮件用什么符点隔开有多少限制

java.mailx群发送邮件用空行点隔开。RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔。MIME协议是对RFC822文档的升级和补充,它描述了生产一封复杂的邮件。把MIME协议描述的邮件称之为MIME邮件。MIME协议描述的数据称之为MIME消息。

java 怎么实现发送邮件例子

第一个类:MailSenderInfo.java

[java] view plain copy

package com.util.mail;

/**

* 发送邮件需要使用的基本信息

*author by wangfun

小说520

*/

import java.util.Properties;

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;

/**

* 获得邮件会话属性

*/

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) {

this.userName = 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;

}

}

第二个类:SimpleMailSender.java

[java] view plain copy

package com.util.mail;

import java.util.Date;

import java.util.Properties;

import javax.mail.Address;

import javax.mail.BodyPart;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Multipart;

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;

/**

* 简单邮件(不带附件的邮件)发送器

BT下载

*/

public class SimpleMailSender {

/**

* 以文本格式发送邮件

* @param mailInfo 待发送的邮件的信息

*/

public boolean sendTextMail(MailSenderInfo mailInfo) {

// 判断是否需要身份认证

MyAuthenticator authenticator = null;

Properties pro = mailInfo.getProperties();

if (mailInfo.isValidate()) {

// 如果需要身份认证,则创建一个密码验证器

authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());

}

// 根据邮件会话属性和密码验证器构造一个发送邮件的session

Session 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){

// 判断是否需要身份认证

MyAuthenticator authenticator = null;

Properties pro = mailInfo.getProperties();

//如果需要身份认证,则创建一个密码验证器

if (mailInfo.isValidate()) {

authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());

}

// 根据邮件会话属性和密码验证器构造一个发送邮件的session

Session 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属性表示接收者的类型为TO

mailMessage.setRecipient(Message.RecipientType.TO,to);

// 设置邮件消息的主题

mailMessage.setSubject(mailInfo.getSubject());

// 设置邮件消息发送的时间

mailMessage.setSentDate(new Date());

// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象

Multipart mainPart = new MimeMultipart();

// 创建一个包含HTML内容的MimeBodyPart

BodyPart 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;

}

}

第三个类:MyAuthenticator.java

[java] view plain copy

package com.util.mail;

import javax.mail.*;

public class MyAuthenticator extends Authenticator{

String userName=null;

String password=null;

public MyAuthenticator(){

}

public MyAuthenticator(String username, String password) {

this.userName = username;

this.password = password;

}

protected PasswordAuthentication getPasswordAuthentication(){

return new PasswordAuthentication(userName, password);

}

}

下面给出使用上面三个类的代码:

[java] view plain copy

public static void main(String[] args){

//这个类主要是设置邮件

MailSenderInfo mailInfo = new MailSenderInfo();

mailInfo.setMailServerHost("smtp.163.com");

mailInfo.setMailServerPort("25");

mailInfo.setValidate(true);

mailInfo.setUserName("han2000lei@163.com");

mailInfo.setPassword("**********");//您的邮箱密码

mailInfo.setFromAddress("han2000lei@163.com");

mailInfo.setToAddress("han2000lei@163.com");

mailInfo.setSubject("设置邮箱标题 如 中国桂花网");

mailInfo.setContent("设置邮箱内容 如 中国桂花网 是中国最大桂花网站==");

//这个类主要来发送邮件

SimpleMailSender sms = new SimpleMailSender();

sms.sendTextMail(mailInfo);//发送文体格式

sms.sendHtmlMail(mailInfo);//发送html格式

}

最后,给出朋友们几个注意的地方:

1、使用此代码你可以完成你的javamail的邮件发送功能。三个类缺一不可。

2、这三个类我打包是用的com.util.mail包,如果不喜欢,你可以自己改,但三个类文件必须在同一个包中

3、不要使用你刚刚注册过的邮箱在程序中发邮件,如果你的163邮箱是刚注册不久,那你就不要使用“smtp.163.com”。因为你发不出去。刚注册的邮箱是不会给你这种权限的,也就是你不能通过验证。要使用你经常用的邮箱,而且时间比较长的。

4、另一个问题就是mailInfo.setMailServerHost("smtp.163.com");与mailInfo.setFromAddress("han2000lei@163.com");这两句话。即如果你使用163smtp服务器,那么发送邮件地址就必须用163的邮箱,如果不的话,是不会发送成功的。

5、关于javamail验证错误的问题,网上的解释有很多,但我看见的只有一个。就是我的第三个类。你只要复制全了代码,我想是不会有问题的。

Java发送邮件

JMS 在你的这个过程中可有可无的

比如 注册后 你在注册成功的后面直接开一个线程 发送邮件 可以的 apache有个发送邮件的包 用起来很方便,这样子就不需要jms

如果你要做成分布式的, 比如 A服务器处理好注册信息后 通知B服务器 让他去发送邮件 那么 A和B之间的通信你就可以用jms 然后在B服务器里面做 前一种方法的做的事情

Java收发邮件过程中具体的功能是怎么实现的

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", "xxxx@sina.com", "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("xxxx@sina.com"));

message.setRecipient(Message.RecipientType.TO, new InternetAddress("1219070362@qq.com"));

message.setSubject("test");

//正文

MimeBodyPart text = new MimeBodyPart();

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

text.setContent("你好xxx,img src='c:/dog.jpg' /测试成功!br/img src='cid:aaa.jpg' /", "text/html;charset=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;

}

}

怎样用java实现邮件的发送?

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;

import java.net.SocketException;

import java.rmi.UnknownHostException;

import java.util.StringTokenizer;

import sun.misc.BASE64Encoder;

public class Sender {

//private boolean debug = true;

BASE64Encoder encode=new BASE64Encoder();//用于加密后发送用户名和密码

static int dk=25;

private Socket socket;

public Sender(String server, int port) throws UnknownHostException,

IOException {

try {

socket = new Socket(server, dk);

} catch (SocketException e) {

System.out.println(e.getMessage());

} catch (Exception e) {

e.printStackTrace();

} finally {

//System.out.println("已经建立连接!");

}

}

// 注册到邮件服务器

public void helo(String server, BufferedReader in, BufferedWriter out)

throws IOException {

int result;

result = getResult(in);

// 连接上邮件服务后,服务器给出220应答

if (result != 220) {

throw new IOException("连接服务器失败");

}

result = sendServer("HELO " + server, in, out);

// HELO命令成功后返回250

if (result != 250) {

throw new IOException("注册邮件服务器失败!");

}

}

private int sendServer(String str, BufferedReader in, BufferedWriter out)

throws IOException {

out.write(str);

out.newLine();

out.flush();

/*

if (debug) {

System.out.println("已发送命令:" + str);

}

*/

return getResult(in);

}

public int getResult(BufferedReader in) {

String line = "";

try {

line = in.readLine();

/*

if (debug) {

System.out.println("服务器返回状态:" + line);

}

*/

} catch (Exception e) {

e.printStackTrace();

}

// 从服务器返回消息中读出状态码,将其转换成整数返回

StringTokenizer st = new StringTokenizer(line, " ");

return Integer.parseInt(st.nextToken());

}

public void authLogin(MailMessage message, BufferedReader in,

BufferedWriter out) throws IOException {

int result;

result = sendServer("AUTH LOGIN", in, out);

if (result != 334) {

throw new IOException("用户验证失败!");

}

result=sendServer(encode.encode(message.getUser().getBytes()),in,out);

//System.out.println("用户名: "+encode.encode(message.getUser().getBytes()));

if (result != 334) {

throw new IOException("用户名错误!");

}

result=sendServer(encode.encode(message.getPassword().getBytes()),in,out);

//result=sendServer(message.getPassword(),in,out);

//System.out.println("密码: "+encode.encode(message.getPassword().getBytes()));

if (result != 235) {

throw new IOException("验证失败!");

}

}

// 开始发送消息,邮件源地址

public void mailfrom(String source, BufferedReader in, BufferedWriter out)

throws IOException {

int result;

result = sendServer("MAIL FROM:" + source + "", in, out);

if (result != 250) {

throw new IOException("指定源地址错误");

}

}

// 设置邮件收件人

public void rcpt(String touchman, BufferedReader in, BufferedWriter out)

throws IOException {

int result;

result = sendServer("RCPT TO:" + touchman + "", in, out);

if (result != 250) {

throw new IOException("指定目的地址错误!");

}

}

// 邮件体

public void data(String from, String to, String subject, String content,

BufferedReader in, BufferedWriter out) throws IOException {

int result;

result = sendServer("DATA", in, out);

// 输入DATA回车后,若收到354应答后,继续输入邮件内容

if (result != 354) {

throw new IOException("不能发送数据");

}

out.write("From: " + from);

out.newLine();

out.write("To: " + to);

out.newLine();

out.write("Subject: " + subject);

out.newLine();

out.newLine();

out.write(content);

out.newLine();

// 句号加回车结束邮件内容输入

result = sendServer(".", in, out);

//System.out.println(result);

if (result != 250) {

throw new IOException("发送数据错误");

}

}

// 退出

public void quit(BufferedReader in, BufferedWriter out) throws IOException {

int result;

result = sendServer("QUIT", in, out);

if (result != 221) {

throw new IOException("未能正确退出");

}

}

// 发送邮件主程序

public boolean sendMail(MailMessage message, String server) {

try {

BufferedReader in = new BufferedReader(new InputStreamReader(

socket.getInputStream()));

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(

socket.getOutputStream()));

helo(server, in, out);// HELO命令

authLogin(message, in, out);// AUTH LOGIN命令

mailfrom(message.getFrom(), in, out);// MAIL FROM

rcpt(message.getTo(), in, out);// RCPT

data(message.getDatafrom(), message.getDatato(),

message.getSubject(), message.getContent(), in, out);// DATA

quit(in, out);// QUIT

} catch (Exception e) {

e.printStackTrace();

return false;

}

return true;

}

}

再写一个MailMessage.java,set/get方法即可。

java 发送邮件

要两个java文件 还有一个mail.jar是不是只能用javamail谁也不敢说

第一个:

public class Constant {

public static final String mailAddress ="用户名@163.com";

public static final String mailCount ="用户名";

public static final String mailPassword ="密码";

public static final String mailServer ="smtp.163.com";

//pukeyouxintest,

}

第二个:

import java.util.Date;

import java.util.Properties;

import javax.mail.Message;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

public class SendMail {

/**

* 发送简单邮件

* @param str_from:发件人地址

* @param str_to:收件人地址

* @param str_title:邮件标题

* @param str_content:邮件正文

*/

public static void send(String str_from,String str_to,String str_title,String str_content) {

// str_content="a href=''html元素/a"; //for testing send html mail!

try {

//建立邮件会话

Properties props=new Properties(); //用来在一个文件中存储键-值对的,其中键和值是用等号分隔的,

//存储发送邮件服务器的信息

props.put("mail.smtp.host",Constant.mailServer);

//同时通过验证

props.put("mail.smtp.auth","true");

//根据属性新建一个邮件会话

Session s=Session.getInstance(props);

s.setDebug(true); //有他会打印一些调试信息。

//由邮件会话新建一个消息对象

MimeMessage message=new MimeMessage(s);

//设置邮件

InternetAddress from= new InternetAddress(str_from); //pukeyouxintest2@163.com

message.setFrom(from); //设置发件人的地址

//

// //设置收件人,并设置其接收类型为TO

InternetAddress to=new InternetAddress(str_to); //pukeyouxintest3@163.com

message.setRecipient(Message.RecipientType.TO, to);

//设置标题

message.setSubject(str_title); //java学习

//设置信件内容

// message.setText(str_content); //发送文本邮件 //你好吗?

message.setContent(str_content, "text/html;charset=gbk"); //发送HTML邮件 //b你好/bbrp大家好/p

//设置发信时间

message.setSentDate(new Date());

//存储邮件信息

message.saveChanges();

//发送邮件

Transport transport=s.getTransport("smtp");

//以smtp方式登录邮箱,第一个参数是发送邮件用的邮件服务器SMTP地址,第二个参数为用户名,第三个参数为密码

transport.connect(Constant.mailServer,Constant.mailCount,Constant.mailPassword);

//发送邮件,其中第二个参数是所有已设好的收件人地址

transport.sendMessage(message,message.getAllRecipients());

transport.close();

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

//测试用的,你吧你想写的内容写上去就行

send(Constant.mailAddress,"收件人邮箱","标题","b内容/b");

}

}

然后把mail.jar导入,就可以了,我用的是163 的,其他的吧相应的服务器改一下就行了

java邮件消息的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java实现邮件发送功能代码、java邮件消息的信息别忘了在本站进行查找喔。