收藏 分销(赏)

javaMail.docx

上传人:xrp****65 文档编号:8751838 上传时间:2025-02-28 格式:DOCX 页数:15 大小:27.81KB 下载积分:10 金币
下载 相关 举报
javaMail.docx_第1页
第1页 / 共15页
javaMail.docx_第2页
第2页 / 共15页


点击查看更多>>
资源描述
- javamail HelloWork 下面程序发送邮件消息,它需要三个命令行参数 SMTP Server From Email Address To Email Address 例如: java Example smtp.mailserver form@ to@ import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; public class MailExample { public static void main(String args[]) throws Exception { String host=args[0]; String from=args[1]; String to=args[2]; //Get system properties Properties props=System.getProperties(); //Setup mail server props.put("mail.smtp.host",host); //Get Session Session session =Session.getInstance(props,null); //Define message MimeMessage message=new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject("Hello JavaMail"); message.setText("Welcome to JavaMail"); //send message Transport.send(message); } } javamail 发送附件的例子 import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class AttachExample { public static void main (String args[]) throws Exception { String host = args[0]; String from = args[1]; String to = args[2]; String fileAttachment = args[3]; // Get system properties Properties props = System.getProperties(); // Setup mail server props.put("mail.smtp.host", host); // Get session Session session = Session.getInstance(props, null); // Define message MimeMessage message = new MimeMessage(session); message.setFrom( new InternetAddress(from)); message.addRecipient( Message.RecipientType.TO, new InternetAddress(to)); message.setSubject( "Hello JavaMail Attachment"); // create the message part MimeBodyPart messageBodyPart = new MimeBodyPart(); //fill message messageBodyPart.setText("Hi"); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); // Part two is attachment messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(fileAttachment); messageBodyPart.setDataHandler( new DataHandler(source)); messageBodyPart.setFileName(fileAttachment); multipart.addBodyPart(messageBodyPart); // Put parts in message message.setContent(multipart); // Send the message Transport.send( message ); } } 使用javamail发信过程中的一些问题及解决方法 今天在研究javamail发信的过程中,出现了一些小问题,现总结如下,以免后来者走些不必要的弯路,先把完整的能够正常运行的代码示例粘贴如下: 发邮件源代码: package com.hyq.test; import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; public class MailExample { public static void main (String args[]) throws Exception { String host = ""; //发件人使用发邮件的电子信箱服务器 String from = "你自己的电子信箱"; //发邮件的出发地(发件人的信箱) String to = "收件人信箱"; //发邮件的目的地(收件人信箱) // Get system properties Properties props = System.getProperties(); // Setup mail server props.put("mail.smtp.host", host); // Get session props.put("mail.smtp.auth", "true"); //这样才能通过验证 MyAuthenticator myauth = new MyAuthenticator("你自己的电子信箱", "你自己的信箱密码"); Session session = Session.getDefaultInstance(props, myauth); // session.setDebug(true); // Define message MimeMessage message = new MimeMessage(session); // Set the from address message.setFrom(new InternetAddress(from)); // Set the to address message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // Set the subject message.setSubject("测试程序!"); // Set the content message.setText("这是用java写的发送电子邮件的测试程序!"); message.saveChanges(); Transport.send(message); } } 校验发信人权限的方法 package com.hyq.test; import javax.mail.PasswordAuthentication; class MyAuthenticator extends javax.mail.Authenticator { private String strUser; private String strPwd; public MyAuthenticator(String user, String password) { this.strUser = user; this.strPwd = password; } protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(strUser, strPwd); } } 注意:上面的事例仅为使用163信箱时发送电子邮件的方法,因为使用的host为:,如源代码中:String host = ""; //发件人使用发邮件的电子信箱服务器,如果使用其它的电子邮件发送,就必须在其邮件服务器上查找相应的电子邮件服务器,例如搜狐就要使用,具体情况具体对待,都可以从所使用的邮件服务器上获得的。如果没有使用host ,也就是说,没有进行props.put("mail.smtp.host", host);设置,那么就会抛javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;的异常。当然了,如果你没有正确配置,这个异常仍然会被抛出的。 有些邮件服务系统是不需要验证发件人的授权的,所以可以很简单的使用 Session session = Session.getDefaultInstance(props, null); 而不必使用 props.put("mail.smtp.auth", "true"); MyAuthenticator myauth = new MyAuthenticator("你自己的电子信箱", "你自己的信箱密码"); Session session = Session.getDefaultInstance(props, myauth); 就可以发送电子邮件了,这个多为一些企事业单位的内部电子信箱系统。 但是对于很多门户网站上的电邮系统,如:163,sohu,yahoo等等,如果仍然简单的这样使用就会抛 com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required,smtp8,wKjADxuAyCAfmnZE8BwtIA==.32705S2 at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388) at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583) at javax.mail.Transport.send0(Transport.java:169) at javax.mail.Transport.send(Transport.java:98) 这样的异常,要求你必须进行授权校验,它的目的就是阻止他人任意乱发邮件,也算是为了减少垃圾邮件的出现吧。这时候,我们就要使用 props.put("mail.smtp.auth", "true"); MyAuthenticator myauth = new MyAuthenticator("你自己的电子信箱", "你自己的信箱密码"); Session session = Session.getDefaultInstance(props, myauth); 这里还有一个特别注意的事情:在你使用Session.getDefaultInstance时,一定要将 props.put("mail.smtp.auth", "true"); 置为true,它默认的是false,如果你没有做这一步,虽然你使用了Session.getDefaultInstance(props, myauth);,你自己也确实 MyAuthenticator myauth = new MyAuthenticator("你自己的电子信箱", "你自己的信箱密码");但是它仍然会抛出 com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required,smtp8,wKjADxJA2SBrm3ZEFv0gIA==.40815S2 at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388) at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583) at javax.mail.Transport.send0(Transport.java:169) at javax.mail.Transport.send(Transport.java:98) 这样的异常。我就在这一步费了好长时间,后来才发现了这个问题,很是郁闷。不过还好,总算解决了。 其实上面的做法只是比较简单的一种,也有很多其它的写法,如: Properties props = System.getProperties();可以使用 Properties props = new Properties();来代替。 Transport.send(message);可以使用下面的代码来代替 String username = "你的电子信箱用户名"; String password = "你的电子信箱密码"; message.saveChanges(); // implicit with send() Transport transport = session.getTransport("smtp"); transport.connect("", username, password); transport.sendMessage(message, message.getAllRecipients()); transport.close(); 这种方法在同时发送多封电子邮件时比较有用。 还有一些具体的相关概念,可以查看相关的官方文档,在我查询资料时,发现了一篇文章写得相当仔细,可以加以参考: 另附上使用mons.mail进行发电子邮件的示例: import mons.mail.SimpleEmail; import mons.mail.*; public class TestCommon { public TestCommon() { } public static void main(String[] args){ SimpleEmail email = new SimpleEmail(); email.setHostName("");//设置使用发电子邮件的邮件服务器 try { email.addTo("收件人信箱"); email.setAuthentication("发件人信箱","发件人信箱密码"); email.setFrom("发件人信箱"); email.setSubject("Test mons.mail message"); email.setMsg("This is a simple test of commons-email"); email.send(); } catch (EmailException ex) { ex.printStackTrace(); } } } 发送三种类型的附件 前面我们已学会了发送一般文本邮件和超文本邮件,今天我们将让大家学会编写三种类型的附件的邮件 发送程序.(注:撰写界面仍然用前面的) <%@ page contentType="text/html;charset=GB2312" %> <%request.setCharacterEncoding("gb2312");%> <%@ page import="java.util.*,javax.mail.*"%> <%@ page import="javax.mail.internet.*"%> <%@ page import="javax.activation.*"%><!--要发送附件必须引入该库--> <%@ page import=".*"%><!--要用到URL类--> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>发送成功</title> </head> <body> <% try{ String tto=request.getParameter("to"); String ttitle=request.getParameter("title"); String tcontent=request.getParameter("content"); Properties props=new Properties(); props.put("mail.smtp.host","127.0.0.1"); props.put("mail.smtp.auth","true"); Session s=Session.getInstance(props); s.setDebug(true); MimeMessage message=new MimeMessage(s); //给消息对象设置发件人/收件人/主题/发信时间 InternetAddress from=new InternetAddress("xxf@"); message.setFrom(from); InternetAddress to=new InternetAddress(tto); message.setRecipient(Message.RecipientType.TO,to); message.setSubject(ttitle); message.setSentDate(new Date()); Multipart mm=new MimeMultipart();//新建一个MimeMultipart对象用来存放多个BodyPart对象 //设置信件文本内容 BodyPart mdp=new MimeBodyPart();//新建一个存放信件内容的BodyPart对象 mdp.setContent(tcontent,"text/html;charset=gb2312");//给BodyPart对象设置内容和格式/编码方式 mm.addBodyPart(mdp);//将含有信件内容的BodyPart加入到MimeMultipart对象中 //设置信件的附件1(自定义附件:直接将所设文本内容加到自定义文件中作为附件发送) mdp=new MimeBodyPart();//新建一个存放附件的BodyPart DataHandler dh=new DataHandler("JavaMail附件测试","text/plain;charset=gb2312"); //新建一个DataHandler对象,并设置其内容和格式/编码方式 mdp.setFileName("xxf.txt");//加上这句将作为附件发送,否则将作为信件的文本内容 mdp.setDataHandler(dh);//给BodyPart对象设置内容为dh mm.addBodyPart(mdp);//将含有附件的BodyPart加入到MimeMultipart对象中 //设置信件的附件2(用本地上的文件作为附件) mdp=new MimeBodyPart(); FileDataSource fds=new FileDataSource("g:/xx.txt"); dh=new DataHandler(fds); mdp.setFileName("dd.txt");//可以和原文件名不一致 mdp.setDataHandler(dh); mm.addBodyPart(mdp); //设置信件的附件3(用远程文件作为附件) mdp=new MimeBodyPart(); URLDataSource ur=new URLDataSource(new URL("http://localhost:8080/jspstudy/email/xx.gif")); //注:这里用的参数只能为URL对象,不能为URL字串,在前面类介绍时有误(请谅解),这里纠正一下. dh=new DataHandler(ur); mdp.setFileName("ss.txt"); mdp.setDataHandler(dh); mm.addBodyPart(mdp); message.setContent(mm);//把mm作为消息对象的内容 message.saveChanges(); Transport transport=s.getTransport("smtp"); transport.connect("127.0.0.1","xxf","coffee"); transport.sendMessage(message,message.getAllRecipients()); transport.close(); %> <div align="center"> <p><font color="#FF6600">发送成功!</font></p> <p><a href="recmail.jsp">去看看我的信箱</a><br> *----------------------------------------------------------------------------------------------------------------* 一下是完整可以运行的例子: 第一个是一般信件sendMailOne(),第二个是带附件sendMailTwo(), package com; import javax.swing.SwingUtilities; import java.awt.BorderLayout; import javax.swing.JPanel; import javax.swing.JFrame; import java.awt.Dimension; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.*; import javax.swing.JButton; import java.awt.Rectangle; import javax.mail.PasswordAuthentication; public class JavaMail extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JButton jButton = null; private JButton jButton1 = null; /** * This method initializes jButton * * @return javax.swing.JButton */ private JButton getJButton() { if (jButton == null) { jButton = new JButton(); jButton.setBounds(new Rectangle(91, 480, 142, 33)); jButton.setText("发送一"); jButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed() sendMailOne(); } }); } return jButton; } /** * This method initializes jButton1 * * @return javax.swing.JButton */ private JButton getJButton1() { if (jButton1 == null) { jButton1 = new JButton(); jButton1.setBounds(new Rectangle(462, 480, 128, 34)); jButton1.setText("发送二"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed() sendMailTwo(); } }); } return jButton1; } /** * @param args */ public static void main(String[] args) { // TODO 自动生成方法存根 SwingUtilities.invokeLater(new Runnable() { public void run() { JavaMail thisClass = new JavaMail(); thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); thisClass.setVisible(true); } }); } /** * This is the default constructor */ public JavaMail() { super(); initialize(); } /** * This method initializes this * * @return void */ private void initialize() { int width=700; int height=600; this.setSize(700, 600); this.setBounds(250, 100, 700, 600); this.setContentPane(getJContentPane()); this.setTitle("发送邮件"); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(getJButton(), null); jContentPane.add(getJButton1(), null); } return jContentPane; } public String sendMailOne() { try{ String host=""; String from="panyongzheng@"; String to="106110454@"; MyAuthenticator myauth = new MyAuthenticator("panyongzheng@", "77185201314"); // String host=""; // String from="106110454@"; // String to="panyongzheng@"; // MyAuthenticator myauth = new MyAuthenticator("106110454@", "015989005206"); System.out.println("Start Send Mail..................."); // Get system properties Properties props=System.getProperties(); // Setup mail server props.put("mail.smtp.host",host); props.put("mail.smtp.auth", "true"); //MyAuthenticator myauth = new MyAuthenticator("panyongzheng@", "77185201314"); // Get Session Session session = Session.getDefaultInstance(props, myauth); //Session session =Session.getInstance(props,null); // Define message MimeMessage message=new MimeMessage(session); message.setFrom(new InternetAddress(from)); messa
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服