java 单机接口限流处理方案
321
2022-06-07
使用Javamail发送邮件,必需的jar包(请下载javamail的源文件,官方下载页:http://oracle.com/technetwork/java/javamail/index-138643.html): mailapi.jar。定义了收发邮件所使用到的接口API; smtp.jar。包含了发送邮件使用到的类; pop3.jar。包含了收邮件使用到的类; 我们通常发送邮件使用的协议是smtp协议,接受邮件使用的协议是pop3协议。或者,我们直接将mail.jar加入到工程,这个jar包里边包含了java收发邮件所有的接口和类。 常用的类:
javax.mail.Session; -------->保存连接服务器所需要的信息; javax.mail.Message; -------->邮件体,保存邮件的内容; javax.mail.Transport; -------->发送邮件的载体 javax.mail.internet.InternetAddress; -------->邮件的地址信息
发送邮件
下边,我先列出使用Java发送邮件的最简单的一个小测试示例:
import java.util.Properties; import javax.mail.Address; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /** * * QQ(mail.qq.com):POP3服务器(端口995)SMTP服务器(端口465或587)。 * */ public class Demo1 { /** * @param args * @throws MessagingException */ public static void main(String[] args) throws MessagingException { String sendUserName = "wangxiangpan@126.com"; String sendPassword = "pwd"; Properties properties = new Properties(); properties.setProperty("mail.smtp.auth", "true");//服务器需要认证 properties.setProperty("mail.transport.protocol", "smtp");//声明发送邮件使用的端口 Session session = Session.getInstance(properties); session.setDebug(true);//同意在当前线程的控制台打印与服务器对话信息 Message message = new MimeMessage(session);//构建发送的信息 message.setText("你好,我是Champion.Wong!");//信息内容 message.setFrom(new InternetAddress("wangxiangpan@126.com"));//发件人 Transport transport = session.getTransport(); transport.connect("smtp.126.com", 25, sendUserName, sendPassword);//连接发件人使用发件的服务器 transport.sendMessage(message, new Address[]{new InternetAddress("492134880@qq.com")});//接受邮件 transport.close(); } }
一般的,我们使用Authenticator把用户名和密码封装起来,不透明!所以:
import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import junit.framework.TestCase; /** * javamail 发送邮件 * @author Champion Wong * Message.addRecipient(Message.Recipient recipient, Address address); 发邮件的时候指定收件人和收件人的角色 * Message.RecipientType.TO 收件人 * Message.RecipientType.CC 抄送,即发邮件的时候顺便给另一个人抄一份,不用回复!但是,上边的收件人可以看到你都抄送给了谁 * Message.RecipientType.BCC 暗送,也是发邮件的时候顺便给另一个人暗发一份,但是,不同于上边的是,收件人不能看到你都暗送给了谁 * */ public class Demo2 extends TestCase { private static final String sendUserName = "wangxiangpan@126.com";// 发送邮件需要连接的服务器的用户名 private static final String sendPassword = "pwd";// 发送邮件需要连接的服务器的密码 private static final String sendProtocol = "smtp";// 发送邮件使用的端口 private static final String sendHostAddress = "smtp.126.com";// 发送邮件使用的服务器的地址 public void test() throws AddressException, MessagingException { Properties properties = new Properties(); properties.setProperty("mail.smtp.auth", "true");// 服务器需要认证 properties.setProperty("mail.transport.protocol", sendProtocol);// 声明发送邮件使用的端口 properties.setProperty("mail.host", sendHostAddress);// 发送邮件的服务器地址 Session session = Session.getInstance(properties, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(sendUserName, sendPassword); } }); session.setDebug(true);//在后台打印发送邮件的实时信息 Message message = new MimeMessage(session); message.setFrom(new InternetAddress("wangxiangpan@126.com")); message.setSubject("Demo2JavaCode发送邮件测试,采用Authenticator");// 设置主题 message.setRecipients(Message.RecipientType.TO, InternetAddress .parse("492134880@qq.com,wangxiangpan@126.com"));// 发送 message.setRecipients(Message.RecipientType.CC, InternetAddress .parse("msn_wangxiangpan@hotmail.com"));// 抄送 message .setContent( "如果您看到,证明测试成功了!", "text/html;charset=gbk"); Transport.send(message);//发送邮件 } }
我们发送一个比较复杂的邮件,包括附件,图文:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
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;
/**
*
* @author Administrator Mr XP.Wang
* MimeMultipart 一般电子邮件的容器是Multipart,定义了增加及删除电子邮件各部分内容的方法,
* 但是其是抽象类,需要其子类MimeMultipart来时用MimeMessage对象
* MimeBodyPart 是BodyPart具体用于mimeMessage的一个子类,MimeBodyPart对象代表一个
* mimeMultipart对象的每一个部分
* MimeUtility.encodeText(String cn)用于解决邮件中的头部信息中中文的乱码问题
*
*/
public class Demo3_test {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
properties.setProperty("mail.smtp.auth", "true");// 服务器需要认证
properties.setProperty("mail.transport.protocol", "smtp");// 声明发送邮件使用的端口
properties.setProperty("mail.host", "smtp.126.com");// 发送邮件的服务器地址
Session session = Session.getInstance(properties, new Authenticator() {
String sendUserName = "wangxiangpan@126.com";
String sendPassword = "pwd";
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(sendUserName,
sendPassword);
}
});
session.setDebug(true);
MimeMessage msg = new MimeMessage(session);// 声明一个邮件体
msg.setFrom(new InternetAddress("/""+MimeUtility.encodeText("Mr XP.Wang")+"/"
收取邮件 示例:Rose 收取最近一封邮件。
import java.util.Date; import java.util.Properties; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.NoSuchProviderException; import javax.mail.Session; import javax.mail.Store; public class FetchMail { public static void main(String[] args) { String protocol = "pop3"; boolean isSSL = true; String host = "pop.163.com"; int port = 995; String username = "rose@163.com"; String password = "rose"; Properties props = new Properties(); props.put("mail.pop3.ssl.enable", isSSL); props.put("mail.pop3.host", host); props.put("mail.pop3.port", port); Session session = Session.getDefaultInstance(props); Store store = null; Folder folder = null; try { store = session.getStore(protocol); store.connect(username, password); folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); int size = folder.getMessageCount(); Message message = folder.getMessage(size); String from = message.getFrom()[0].toString(); String subject = message.getSubject(); Date date = message.getSentDate(); System.out.println("From: " + from); System.out.println("Subject: " + subject); System.out.println("Date: " + date); } catch (NoSuchProviderException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } finally { try { if (folder != null) { folder.close(false); } if (store != null) { store.close(); } } catch (MessagingException e) { e.printStackTrace(); } } System.out.println("接收完毕!"); } }
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~