java 发送邮件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 发送邮件相关的知识,希望对你有一定的参考价值。
java如何在后台直接发送邮件呢? 不要太复杂的 只能把标题和内容通过我指定的邮箱直接发到目标邮箱 就可以了 附件一类的都不要,谁能给我哥列子呢? 感激不尽
只能用javamail吗? 可不可以通过Socket实现呢?
第一个:
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='www.163.com'>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>你好</b><br><p>大家好</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 的,其他的吧相应的服务器改一下就行了 参考技术A 首先需要安装JavaMail和JavaBeans Activation Framework,就是下载mail.jar和activation.jar然后把他们添加到了CLASSPATH中。下面是一个简单的发邮件的程序:
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.io.*;
public class SendMailUsingAuthentication
private static final String SMTP_HOST_NAME = "smtp.163.com";//如果用163的邮箱就用这个地址
private static final String SMTP_AUTH_USER = "指定邮箱";
private static final String SMTP_AUTH_PWD = "邮箱密码";
private static final String emailMsgTxt = "邮件内容";
private static final String emailSubjectTxt = "邮件标题";
private static final String emailFromAddress = "你的指定邮箱地址";
// 添加发送邮箱的地址,本例是向两个邮箱发送
private static final String[] emailList = "目的邮箱地址1","目的邮箱地址2";
public static void main(String args[]) throws Exception
SendMailUsingAuthentication smtpMailSender = new SendMailUsingAuthentication();
smtpMailSender.postMail( emailList, emailSubjectTxt, emailMsgTxt, emailFromAddress);
System.out.println("Sucessfully Sent mail to All Users");
public void postMail( String recipients[ ], String subject,
String message , String from) throws MessagingException
boolean debug = false;
Properties props = new Properties();
props.put("mail.smtp.host", SMTP_HOST_NAME);
props.put("mail.smtp.auth", "true");
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getDefaultInstance(props, auth);
session.setDebug(debug);
Message msg = new MimeMessage(session);
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++)
addressTo[i] = new InternetAddress(recipients[i]);
msg.setRecipients(Message.RecipientType.TO, addressTo);
msg.setSubject(subject);
msg.setContent(message, "text/plain;charset=gb2312");
Transport.send(msg);
private class SMTPAuthenticator extends javax.mail.Authenticator
public PasswordAuthentication getPasswordAuthentication()
String username = SMTP_AUTH_USER;
String password = SMTP_AUTH_PWD;
return new PasswordAuthentication(username, password);
最好自己申请几个邮箱,实验一下。
至于能不能用socket实现,这个不太清楚。 参考技术B JAVAMAIL比Socket发送邮件更简单,但是需要加载mail.jar。
以下是Socket发送邮件:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class testSendMail
/**
* <br>
* 方法说明:主方法 <br>
* 输入参数:1。服务器ip;2。对方邮件地址 <br>
* 返回类型:
*/
public static void main(String[] arges)
if (arges.length != 2)
System.out.println("use java sendSMTPMail hostname | mail to");
return;
testSendMail t = new testSendMail();
t.sendMail(arges[0], arges[1]);
public void sendMail(String mailServer, String recipient)
try
// 有Socket打开25端口
Socket s = new Socket(mailServer, 25);
// 缓存输入和输出
BufferedReader in = new BufferedReader(new InputStreamReader(s
.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s
.getOutputStream()));
// 发出“HELO”命令,表示对服务器的问候
send(out, "HELO aaa");
// 告诉服务器我的邮件地址,有些服务器要校验这个地址
send(out, "MAIL FROM: <06281040@bjtu.edu.cn>");
// 使用“RCPT TO”命令告诉服务器解释邮件的邮件地址
send(out, "RCPT TO: " + recipient);
// 发送一个“DATA”表示下面将是邮件主体
send(out, "DATA");
// 使用Subject命令标注邮件主题
String str1 = "Subject: zao shang hao";
send(out, str1);
// 使用“From”标注邮件的来源
send(out, "From: 06281040@bjtu.edu.cn");
send(out, "\n");
// 邮件主体
send(out, "呵呵");
send(out, "\n.\n");
// 发送“QUIT”端口邮件的通讯
send(out, "QUIT");
s.close();
catch (Exception e)
e.printStackTrace();
public void send(BufferedWriter out, String s)
try
out.write(s + "\n");
out.flush();
System.out.println(s);
catch (Exception e)
e.printStackTrace();
java 当数据库数据发生变化时自动发送邮件
我在做一个项目,要求是:当商品缺货时,系统自动向客户邮件发送邮件。在java中,可以使用什么方法,随时检查数据库中某个商品缺货时,调用过java中的方法发送邮件。(注:如何发送邮件我知道)。希望给点完整的代码
客户在设置信息里设置了缺货通知,当缺货时只通知一次即可,想用触发器处理
2. spring的定时task也可以实现你的机制,不过也是间接调用java.util.Timer什么的。
3. 某个商品缺货,应该可以select语句获取改标记位,如果是,就定时发送。
4. 没有代码追问
最主要的是我之前没有写过定时任务,可否给个demo
追答网页搜索一大把,几秒钟就搞定了 参考技术A spring配置切面,在执行出货的service方法之前或之前做拦截,对数据库中的货品数量判断追问可否给个小demo
追答http://blog.csdn.net/rongyongfeikai2/article/details/6755774
追问开始咨询了我们设计,简单说了哈,在service里写一段代码,使用触发器处理,具体说的也不清楚,请高手详细给我说一下改怎么做?
追答最好不要用定时轮询数据库的设计,等数据多了效率会是很大问题,用切面可以实时触发。spring aop自己查询一下吧,会对你有很大帮助。
参考技术B 搜索 spring quartz ,配置成功后,执行过程的代码与一般方法没有区别追问开始咨询了我们设计,简单说了哈,在service里写一段代码,使用触发器处理。关于这种方式,请问高手之前用过没。具体说的也不清楚,详细给我说一下改怎么做?
追答quartz 就是采用触发器机制,简单的说就是设置一个触发器(Cron表达式),触发后会自动调用你的service层方法,所以只要先了解spring quartz 的配置,实现功能是很简单的
本回答被提问者采纳 参考技术C 写个定时程序,隔几秒查一下数据库,缺货时发邮件。追问定时程序的小demo方便给一个吗
追答百度“java定时任务”
以上是关于java 发送邮件的主要内容,如果未能解决你的问题,请参考以下文章