JavaMail 发送验证邮件(JSP/Servlet实例源码)

迷你旅游网——项目初始化(从GitHub上pull项目并导入IDEA......) 0.写在前面 1)首先我们准备好一个原始的项目,一个前端功能完善且后端所需资源都齐全的项目,这里给出博主github的项目仓库链接,https://github.com/capriciousness/travel_0.git ,需要可自行下载; 2)将项目导入IDEA具体操作可参考本人的另一篇博客,只需将远程仓库名称更换为步骤一中的仓库链接即可,详情可参考 https://blog.csdn.ne... 阅读详情

JavaMail 发送验证邮件(JSP/Servlet实例源码)

关键词: JavaMail    邮件    认证                                          

 

● 发送email:包括文本邮件、HTML邮件、带附件的邮件、SMTP验证
● 接收email:pop3远程连接、收取不同MIME的邮件、处理附件

首先需要配置环境。需要mail.jar和activation.jar两个包。地址在java.sun.com上,很容易找到。放到classpath中,比如我的是这样.;E:/Tomcat5/common/lib/activation.jar;E:/Tomcat5/common/lib/mail.jar;E: /Tomcat5/common/lib/mailapi.jar;E:/Tomcat5/common/lib/;E:/jdk1.5/lib/dt.jar; E:/jdk1.5/lib/tool.jar;E:/jdk1.5/lib/;E:/jdk1.5/bin/;E:/jdk1.5。

 


例子一、javamail.jsp 发送验证邮件源代码

<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK" %>
<%
//set Chinese Char
//homepage:jiarry.126.com
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
response.setContentType("text/html; charset=GBK");
%>
<%@ page import="javax.mail.*, javax.mail.internet.*,javax.activation.*,java.util.*,java.io.*;"%>

<html>
<head>
<title>JavaMail 电子邮件发送系统</title>
</head>
<body>
JavaMail 电子邮件发送系统
<br>本例子是用java mail来发送邮件的最简单的例子,认证才能正常发送邮件。
<form action="" method="post" OnSubmit="">
收件人Email:<br /> <input type="text" name="recipients"><br />
发件人Mail:<br /> <input name="frommail" type="text" size="30" /><br />
邮件标题 <br /> <input name="subject" type="text" size="50" /><br />
内容:<br /> <textarea name="contents" cols="50" rows="10"></textarea>
 <br /> <input type="submit" name="Submit" value="发送邮件" />
<form>
<%!
String host = "smtp.126.com";
String user = "username";
String password = "xxxxx";
String contentType="text/html; charset=gbk";

private class Authenticator extends javax.mail.Authenticator
{
    public PasswordAuthentication getPasswordAuthentication()
    {
        String un = user;
        String pw = password;
        return new PasswordAuthentication(un, pw);
    }
}
%>
<%
  String touser = request.getParameter("recipients")!=null ? request.getParameter("recipients") : "";
  out.print("<br>recipients:" + touser);
  String fromuser = request.getParameter("frommail")!=null ? request.getParameter("frommail") : "";
  out.print("<br>frommail:" + fromuser);
  String subject = request.getParameter("subject")!=null ? request.getParameter("subject") : "";
  out.print("<br>subject:" + subject);
  String contents = request.getParameter("contents")!=null ? request.getParameter("contents") : "";
  out.print("<br>contents:" + contents);
  out.print("<br>");
 
try{
Properties props = new Properties();
props.put("mail.smtp.auth","true"); //是否验证
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", user);
props.put("mail.smtp.password",password);


boolean sessionDebug = false;
Authenticator auth = new Authenticator();
//Session mailSession = Session.getDefaultInstance(props, auth); //有时可能被拒绝
Session mailSession = Session.getInstance(props,auth); //用户验证;
//Session mailSession = Session.getInstance(props);
mailSession.setDebug(sessionDebug);


Message msg = new MimeMessage(mailSession);
 msg.setFrom(new InternetAddress( fromuser ));
 msg.setRecipient(Message.RecipientType.TO, new InternetAddress( touser ));
 msg.setSubject( "邮件标题:" +subject);
 //((MimeMessage)msg).setSubject(subject, "GBK"); //设置中文标题
 msg.setSentDate(new Date());

String text = "javamail.jsp 发送认证邮件<b>测试</b>。<hr>" + contents;

msg.setContent(text, contentType);

Transport transport = mailSession.getTransport("smtp");
transport.connect(host,user,password);

transport.send( msg );

%><p>你的邮件已发送,<a href="javascript:window.go(-1)">请返回。</></p><%
}
catch(Exception m){out.println(m.toString());}%>
</BODY>
</HTML>


 

例子二、用Servlet来发送邮件 ,PostMail.java 源代码

package mail;
import javax.mail.*;
import javax.mail.internet.*;

import java.util.*;
/*
 * 创建日期 2005-12-1
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
/**
 * @author Administrator
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class PostMail {
 /*String mailform=""; String mailto="";String mailsubject="";String mailcontent="";*/
 String host="smtp.126.com";
  String user="username";
  String password="xxxxx";
  public void setHost(String host)
  {
   this.host=host;
  }

  public void setAccount(String user,String password)
  {
   this.user=user;
   this.password=password;
  }

  public void send(String from,String to,String subject,String content)
  {
   Properties props = new Properties();
   props.put("mail.smtp.host", host);//指定SMTP服务器
   props.put("mail.smtp.auth", "true");//指定是否需要SMTP验证
   try
   {
    //Session mailSession = Session.getDefaultInstance(props);//用这个有时被拒绝;
    Session mailSession = Session.getInstance(props);
   
    mailSession.setDebug(true);//是否在控制台显示debug信息
    
    Message message=new MimeMessage(mailSession);
    message.setFrom(new InternetAddress(from));//发件人
    message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));//收件人   //message.setSubject(subject); 

  ((MimeMessage)message).setSubject(subject, "GBK");
  //得到中文标题for linux,windows下不用;   
   // message.setSubject(subject);//邮件主题   
  
  //内容类型Content-type
  //普通文本为text/plain,html格式为text/html
    message.setContent(content,"text/html;charset=GBK");
    //message.setText("<html><body><h1>Java Mail,你好!</body></html>");
   
    message.setText(content);//邮件内容
    message.saveChanges();
    
    Transport transport = mailSession.getTransport("smtp");
    transport.connect(host, user, password);
    transport.sendMessage(message, message.getAllRecipients());


    transport.close();
   }catch(Exception e)
   {
    System.out.println(e);
   }
   
  }

  public static void main(String args[])
  {
 /*  PostMail sm=new PostMail();

   sm.setHost("smtp.126.com");//指定要使用的邮件服务器
   sm.setAccount("xxxxx","xxxxx");//指定帐号和密码

   /*
    * @param String 发件人的地址
    * @param String 收件人地址
    * @param String 邮件标题
    * @param String 邮件正文
   */ 

  }

  } 

调用PostMail.java的jsp文件:postmail.jsp源代码

<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK" %>
<%
//set Chinese Char
//homepage:jiarry.126.com
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
response.setContentType("text/html; charset=GBK");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>电子邮件</title>
<script language="JavaScript">
<!--
function checkdata() {
 var txt  = document.forms[0].email.value;
 if(txt.search("^//w+([-+.]//w+)*@//w+([-.]//w+)*//.//w+([-.]//w+)*$")!=0) {
  alert("请输入正确电子邮件");
  document.forms[0].email.select();
  return false;
 }
 
 return true;
}
-->
</script>
</head>
<body>
<p>
<%
java.util.Date date = new java.util.Date();
out.print(new java.util.Date());
out.print("<hr>");
%>
本例子是调用PostMail.java来发送认证的邮件,需要下载mail.jar和activation.jar,并设置classpath
<jsp:useBean id="mail" scope="page" class="mail.PostMail" />
<form action="" method="post" OnSubmit="return checkdata()">
<p>请输入发件人电子邮件:<input type="text" name="email">
<p>请输入收件人电子邮件:<input type="text" name="toemail">
<p><input type="submit" value="发送">
<form>
<%

String email ="",toemail="";
   if(request.getParameter("email")!=null){
  email =request.getParameter("email");
 }
   if(request.getParameter("toemail")!=null){
  toemail =request.getParameter("toemail");
 }
 //if(email!=null)
 if( email.trim().length()>0 && !email.matches("^//w+([-+.]//w+)*@//w+([-.]//w+)*//.//w+([-.]//w+)*$")) {
  out.print("发件人邮件地址不正确");
  return;
 }
 if(toemail.trim().length()>0 && !toemail.matches("^//w+([-+.]//w+)*@//w+([-.]//w+)*//.//w+([-.]//w+)*$")) {
  out.print("收件人邮件地址不正确");
  return;
 }
 
  if(email.trim().length()>0 && toemail.trim().length()>0){
  try{
    mail.send(email,toemail, "Test PostMail.java 中文", "<h1>Java Mail,你好 PostMail!</h1><br><br><b>Jiarry.126.com</b>");
     out.print("<font color='green'>邮件已发送</font>");
   }catch(Exception e){
    out.print( "<font color='red'>出错了</font>");
    out.print(e.getMessage());
    System.out.print(e.getMessage());
   }
}
 
%>
</body>
</html>

 


 

其他java源代码:MailManager.java 源代码

package mail;

import javax.mail.*; 
import javax.mail.internet.*; 
import java.util.*;
import javax.activation.*;
import java.io.*;

public class MailManager {
 
 //sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
 //msg.setSubject("=?GB2312?B?"+enc.encode(subject.getBytes())+"?=");
 
 //比如说有一个邮件帐号: smtpuser@xxx.com
 //POP3_HOST_NAME和SMTP_HOST_NAME分别是这邮件地址的pop3和smtp服务器DNS
 //则SMTP_AUTH_USER ="smtpuser", SMTP_AUTH_PWD就是该帐号的密码

 private  final String POP3_HOST_NAME = "pop3.126.com";
 private  final String SMTP_HOST_NAME = "smtp.126.com";
 private  final String SMTP_AUTH_USER = "username";
 private  final String SMTP_AUTH_PWD  = "xxxxxx"; 
 
 private Authenticator auth = new Authenticator(){
  public PasswordAuthentication getPasswordAuthentication(){
   return new PasswordAuthentication(SMTP_AUTH_USER, SMTP_AUTH_PWD);
  }
 };
 
 public void sendMail(String toAddr, String subject,
     String body, String fromAddr, String contentType) {
  try { 
   Properties props = new Properties(); 
   
   //指定SMTP服务器,邮件通过它来投递
   props.put("mail.smtp.host", (String)SMTP_HOST_NAME);
   props.put("mail.smtp.auth", (String)"true");   
   //Session session =Session.getDefaultInstance(props, auth);
   Session session =Session.getInstance(props, auth); //
   Message msg = new MimeMessage(session); 
   
   //指定发信人
   msg.setFrom(new InternetAddress(fromAddr));

   //指定收件人
   //InternetAddress[] tos = {new InternetAddress(toAddr)}; 
   //msg.setRecipients(Message.RecipientType.TO,tos);
    
   //指定收件人,多人时用逗号分隔
   InternetAddress[] tos =InternetAddress.parse(toAddr); 
   msg.setRecipients(Message.RecipientType.TO,tos);

   //标题//转码BASE64Encoder
   //sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
   //msg.setSubject("=?GBK?B?"+enc.encode(subject.getBytes())+"?=");
   //msg.setSubject(new String(subject.getBytes("GBK"),"ISO8859-1"));
   //msg.setSubject("=?GB2312?B?"+enc.encode(subject.getBytes())+"?=");
   //msg.setSubject(subject);
   ((MimeMessage)msg).setSubject(subject,"GBK");
   //得到中文标题for linux,windows下不用;
   
   //内容
   msg.setText(body);
   
   //发送时间
   msg.setSentDate(new Date());
   
   //内容类型Content-type
   //普通文本为text/plain,html格式为text/html;charset=GBK
   msg.setContent(body, contentType);
   
   //发送
   Transport.send(msg); 
   
  } catch(Exception e){ 
   System.out.println(e); 
  } 
 }
 
 public void sendMailWithAttatchment(String toAddr, String subject, String body,
        String fromAddr, String contentType, String []fileList) {
  try { 
   Properties props = new Properties(); 
   
   //指定SMTP服务器,邮件通过它来投递
   props.put("mail.smtp.host", SMTP_HOST_NAME);
   props.put("mail.smtp.auth", "true");

   Session session = Session.getDefaultInstance(props, auth);
   //Session session = Session.getInstance(props, auth);//
   SecurityManager security = System.getSecurityManager();
   System.out.println("Security Manager" + security);
//Looking at your code it looks like you will see a null value for security.
//If the security is null use session.getInstance(props,auth)
//instead of session.getDefaultInstance(props,auth).

   Message msg = new MimeMessage(session); 
   
   //指定发信人
   msg.setFrom(new InternetAddress(fromAddr));
    
   //指定收件人
   //InternetAddress[] tos = {new InternetAddress(toAddr)}; 
   //msg.setRecipients(Message.RecipientType.TO,tos);
   
   //指定收件人,多人时用逗号分隔
   InternetAddress[] tos =InternetAddress.parse(toAddr); 
   msg.setRecipients(Message.RecipientType.TO,tos);
   
   //标题//转码BASE64Encoder
   //sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
   //msg.setSubject("=?GBK?B?"+enc.encode(subject.getBytes())+"?=");
   //msg.setSubject(new String(subject.getBytes("GBK"),"ISO8859-1"));
   //msg.setSubject("=?GB2312?B?"+enc.encode(subject.getBytes())+"?=");
   //msg.setSubject(subject);
   ((MimeMessage)msg).setSubject(subject, "GBK");
   //得到中文标题for linux,windows下不用;
   
   //发送时间
   //msg.setSentDate(new Date());
   msg.setSentDate(new java.util.Date());
   Multipart multipart = new MimeMultipart();
   MimeBodyPart bodyPart = new MimeBodyPart();
   //内容
   bodyPart.setText(body);
   //Content-type
   bodyPart.setContent(body, contentType);
   multipart.addBodyPart(bodyPart);
   
   for(int i=0; i<fileList.length; ++i) {
    bodyPart = new MimeBodyPart();
    File f = new File(fileList[i]);
    DataSource source = new FileDataSource(f);
    bodyPart.setDataHandler(new DataHandler(source));
    bodyPart.setFileName(f.getName());
    
    multipart.addBodyPart(bodyPart);
   }
   
   msg.setContent(multipart);

   //发送
   Transport.send(msg); 
   
  } catch(Exception e){ 
   System.out.println(e); 
  } 
 }
/*
 public Mails getMails() {
  Mails mails=null;
  try { 
   //Properties props = System.getProperties();
   Properties props = new Properties();    
   props.put("mail.pop3.host", SMTP_HOST_NAME);
   props.put("mail.pop3.auth", "true");

   Session session = Session.getDefaultInstance(props, auth);
   
   Store store = session.getStore("pop3");
   store.connect();
   
   Folder inbox = store.getFolder("INBOX");
   mails = new Mails(inbox);
   store.close();
      
  } catch(Exception e){
   System.out.println(e);
  }
  return mails;
 }*/
}

 



SendMailUsingAuthentication.java 源代码,引用这个java bean发送认证email例子

 

package mail;

import javax.mail.*;
import javax.mail.internet.*;

import java.util.*;

/*
  To use this program, change values for the following three constants,

    SMTP_HOST_NAME -- Has your SMTP Host Name
    SMTP_AUTH_USER -- Has your SMTP Authentication UserName
    SMTP_AUTH_PWD  -- Has your SMTP Authentication Password

  Next change values for fields

  emailMsgTxt  -- Message Text for the Email
  emailSubjectTxt  -- Subject for email
  emailFromAddress -- Email Address whose name will appears as "from" address

  Next change value for "emailList".
  This String array has List of all Email Addresses to Email Email needs to be sent to.


  Next to run the program, execute it as follows,

  SendMailUsingAuthentication authProg = new SendMailUsingAuthentication();

*/

public class SendMailUsingAuthentication
{

  private static final String SMTP_HOST_NAME = "smtp.126.com";
  private static final String SMTP_AUTH_USER = "username";
  private static final String SMTP_AUTH_PWD  = "******";

  private static final String emailMsgTxt      = "Online Order Confirmation Message. Also include the Tracking Number.中国人";
  private static final String emailSubjectTxt  = "这里是标题,Java Mail test";
  private static final String emailFromAddress = "user@126.com";

  // Add List of Email address to who email needs to be sent to
  private static final String[] emailList = {"username@126.com", "xxxx@126.com"};

 
  public static void main(String args[]) throws Exception
  {
    //SendMailUsingAuthentication smtpMailSender = new SendMailUsingAuthentication();
    //smtpMailSender.postMail( emailList, emailSubjectTxt, emailMsgTxt, emailFromAddress);
    //smtpMailSender.postMail( emailList, emailSubjectTxt, emailMsgTxt, emailFromAddress);
    //System.out.println("Sucessfully Sent mail to All Users");
  }

  public void postMail( String recipients[], String subject,
  //public void postMail( String recipients, String subject,
                            String message , String from) throws MessagingException
  {
    boolean debug = false;

     //Set the host smtp address
     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 session = Session.getInstance(props,auth);
   
    session.setDebug(debug);

    // create a message
    Message msg = new MimeMessage(session);

    // set the from and to address
    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.setRecipient(Message.RecipientType.TO,toemail);
    // Setting the Subject and Content Type
   
 //标题//转码BASE64Encoder
 //sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
 //msg.setSubject("=?GBK?B?"+enc.encode(subject.getBytes())+"?=");
 //msg.setSubject(new String(subject.getBytes("GBK"),"ISO8859-1"));
 //msg.setSubject("=?GB2312?B?"+enc.encode(subject.getBytes())+"?=");
 //msg.setSubject(subject);
 ((MimeMessage)msg).setSubject(subject, "GBK");
 //得到中文标题for linux,windows下不用; 
   
   // msg.setSubject(subject);
    msg.setContent(message, "text/html;charset=GBK");
    //msg.setContent(message, "text/plain");
    Transport.send(msg);
 }


/**
* SimpleAuthenticator is used to do simple authentication
* when the SMTP server requires it.
*/
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);
    }
}

}

 

 


 

 

参考:
Bromon原创 请尊重版权 

  怎样才算比较完整的Javamail操作指南?我想应该包括绝大多数基本的email操作,能够应付一般的应用。在本指南中打算囊括以下内容:

 ● 发送email:包括文本邮件、HTML邮件、带附件的邮件、SMTP验证
 ● 接收email:pop3远程连接、收取不同MIME的邮件、处理附件

  我想有了上述功能的介绍,应该可以应付很多email的相关应用了。所以请允许我给本文拟了一个比较狂妄的名字,这样才能保证收视率,:)。还是那句话,写这个post的原因就是没有在网上看到更全面的,你看过的话记得要告诉我。

  下面的所有例子都经过实际测试,你可以说它写得不够OO,不够plugable,但是它的确是可以参考的。自从有了javamail,发垃圾邮件就方便多了。本文代码多说明少,这倒不是我偷懒,而是很多东西都涉及pop3等协议的规范,如果不了解这些规范的话,有的东西我实在不知道怎么跟你解释;如果了解的话,那我基本上就不用再解释。所以本着实用的原则就省略了,由兴趣的话自己去翻翻协议规范。

  废话少说,首先需要配置环境。需要的包是mail.jar和activation.jar。高版本的J2SDK EE自带。地址嘛,再java.sun.com上搜索一下,很容易找到。放到classpath中就KO。

 一、 邮件的发送

 下面了弄个发邮件的Hello World,热热身:

 
  1. /*************
  2.  Name:TextMailSender.java
  3.  Author:Bromon
  4.  Version:1.0
  5.  Date:2004-4-26
  6.  Note:发送email到bromon@163.com,需要安装SMTP服务器
  7.  *************/
  8.  package org.bromon.mail;
  9.  import javax.mail.*;
  10.  import javax.mail.internet.*;
  11.  import java.util.*;
  12.  public class TextMailSender
  13.  {
  14.  public static void main(String args[])
  15.  {
  16.   try
  17.   {
  18.    Properties prop=new Properties();
  19.    //指定要使用的SMTP服务器为bromon2k
  20.    prop.put("mail.smtp.host","bromon2k");
  21.    Session mailSession=Session.getDefaultInstance(prop);
  22.    //发件人地址
  23.    InternetAddress from=new InternetAddress("bromon@bromon2k");
  24.    //收件人地址
  25.    InternetAddress to=new InternetAddress("bromon@163.com");
  26.    
  27.    MimeMessage msg=new MimeMessage(mailSession);
  28.    msg.setFrom(from);
  29.    msg.addRecipient(javax.mail.Message.RecipientType.TO,to);
  30.    //发信日期
  31.    msg.setSentDate(new java.util.Date());
  32.    //title
  33.    msg.setSubject("你好");
  34.    //邮件正文
  35.    msg.setText("hello,bromon");
  36.    Transport.send(msg);
  37.   }catch(Exception e)
  38.   {
  39.    System.out.println(e);
  40.   }
  41.  }
  42.  } 


  程序很简单,但是它是不能运行的(倒)。除非你的机器上安装了一个SMTP服务器,而且你的机器还叫做bromon2k。写这么一段不能执行的程序不是为了找打,而是让各位对javamail有个基本印象,我就懒得改了。下面演示的是如何通过163、sohu等email服务商提供的免费邮箱来发邮件,基本操作和上面的一样,只是多一个SMTP验证而已:

 
  1. /*
  2.  * Created on 2004-4-26
  3.  */
  4.  package org.bromon.mail;
  5.  import javax.mail.*;
  6.  import java.util.*;
  7.  import javax.mail.internet.*;
  8.  /**
  9.  * @author Bromon
  10.  */
  11.  public class SenderWithSMTPVer
  12.  {
  13.  String host="";
  14.  String user="";
  15.  String password="";
  16.  public void setHost(String host)
  17.  {
  18.   this.host=host;
  19.  }
  20.  public void setAccount(String user,String password)
  21.  {
  22.   this.user=user;
  23.   this.password=password;
  24.  }
  25.  public void send(String from,String to,String subject,String content)
  26.  {
  27.   Properties props = new Properties();
  28.   props.put("mail.smtp.host", host);//指定SMTP服务器
  29.   props.put("mail.smtp.auth", "true");//指定是否需要SMTP验证
  30.   try
  31.   {
  32.    Session mailSession = Session.getDefaultInstance(props);
  33.    
  34.    mailSession.setDebug(true);//是否在控制台显示debug信息
  35.    
  36.    Message message=new MimeMessage(mailSession);
  37.    message.setFrom(new InternetAddress(from));//发件人
  38.    message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));//收件人
  39.    
  40.    message.setSubject(subject);//邮件主题
  41.    message.setText(content);//邮件内容
  42.    message.saveChanges();
  43.    
  44.    Transport transport = mailSession.getTransport("smtp");
  45.    transport.connect(host, user, password);
  46.    transport.sendMessage(message, message.getAllRecipients());
  47.    transport.close();
  48.   }catch(Exception e)
  49.   {
  50.    System.out.println(e);
  51.   }
  52.   
  53.  }
  54.  public static void main(String args[])
  55.  {
  56.   SenderWithSMTPVer sm=new SenderWithSMTPVer();
  57.   sm.setHost("smtp.163.com");//指定要使用的邮件服务器
  58.   sm.setAccount("abc","123");//指定帐号和密码
  59.   /*
  60.  * @param String 发件人的地址
  61.    * @param String 收件人地址
  62.    * @param String 邮件标题
  63.    * @param String 邮件正文
  64.   */
  65.   sm.send("abc@163.com","bromon@163.com","标题","内容");
  66.  }
  67.  } 


 这段程序好像也不需要解释了吧,把SMTP地址、帐号、密码等配置信息写到Properties里面,Java里面很多API都需要这么干,比如再程序中加入对代理服务器的支持等。

 上面的程序修改一下服务器地址、帐号、密码就可以使用,非常简单。

 如何发送一个HTML格式的Email呢?也很简单,再邮件正文中写入HTML代码,然后指定邮件的ContentType就OK,下面只给出关键代码:

 
  1. ………
  2.  MimeMessage msg=new MimeMessage(mailSession);
  3.  msg.setContent(content,"text/html");
  4.  msg.setText(“<html><body><h1>下面的,你们好吗?</body></html>”);
  5.  ………


 下面是发送带有附件的email,稍微复杂一点,而且和前面的程序有一些不同,请仔细一点,同时需要一点IO的知识。相同的代码就不在列出,只写关键部分,谁都想偷懒不是?

 
  1. import javax.mail.*;
  2.  import javax.mail.internet.*;
  3.  import javax.activation.*;
  4.  import java.util.*;
  5.  ……….
  6.  MimeMessage msg=new MimeMessage(mailSession);
  7.  msg.setSentDate(new Date());
  8.  msg.setSubject("hello");
  9.  MimeBodyPart textBodyPart=new MimeBodyPart();
  10.  textBodyPart.setText(“邮件正文”);
  11.  MimeBodyPart fileBodyPart=new MimeBodyPart();
  12.  FileDataSource fds=new FileDataSource("GIS.rar");//要发送的附件
  13.  fileBodyPart.setDataHandler(new DataHandler(fds));
  14.  fileBodyPart.setFileName(fds.getName());
  15.  Multipart container=new MimeMultipart();
  16.  container.addBodyPart(textBodyPart);
  17.  container.addBodyPart(fileBodyPart);
  18.  msg.setContent(container);
  19.  Transport.send(msg);
  20.  ………… 
http://www.huihoo.com/java/javamail/javamail_faq.html#free 






很多朋友都使用过JavaMail进行邮件发送,在邮件正文中的乱码容易解决。但邮件主题的乱码无论怎样转码总是显示一堆乱码。到底应该怎么处理呢?

JavaMail中的邮件主题需要进行BASE64编码,格式形如:
=?GB2312?B?xPq1xMPcwuvS0b6t1tjWw6Osx+u+ob/stcfCvKOssqLQ3rjEw9zC66Oh?=
所以,直接使用msg.setSubject("中文主题"),或者msg.setSubject("中文主题".getBytes("8859_1"), "GB2312"))都一样会出现乱码。在设置邮件主题前需要将主题字串的字节编码为BASE64格式,并添加编码头,示例代码如下:

sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder(); msg.setSubject("=?GB2312?B?"+enc.encode(subject.getBytes())+"?=");

怎么样,现在中文可以正常显示了吧。

原文转自Java中文站
验证电子邮件的Python代码 这个正则表达式的模式意味着电子邮件地址应包含一个或多个字母、数字、下划线、连字符、点号,紧接着是@符号,然后是一个或多个字母、数字、连字符、点号,最后以一个或多个字母或数字结尾。请注意,该代码只验证电子邮件的格式,而不验证电子邮件的实际可用性。首先,我们需要导入Python的re模块,该模块提供了正则表达式的功能,可以方便地进行字符串匹配和模式查找。函数,该函数接受一个电子邮件地址作为参数,并返回一个布尔值,指示该地址是否为有效的电子邮件格式。在代码的下半部分,我们使用了三个示例电子邮件地址进行测试。 阅读详情

相关推荐

JavaWeb宠物医院管理系统毕业设计:从源码到论文全解析

JavaWeb是当前软件工程专业毕业设计的核心方向之一,其技术栈涵盖Servlet、JSP、MySQL等基础组件,是理解Web应用底层原理的关键。三层架构将界面、业务逻辑与数据持久化分离,不仅降低系统耦合度,也为后续迁移到Spring Boot等框架提供清晰的演进路径。在宠物医疗行业数字化需求持续增长的背景下,一个功能完整的管理系统需要涵盖用户预约、医生接诊、病历管理、药品库存等典型业务模块,这恰好为毕业设计提供了一个业务闭环清晰、技术覆盖面广的实战案例。本文围绕一套基于JSP+Servlet+MySQL的

weixin_28452161的博客 323

JavaMail发邮件

背景: 一般来说,应用系统都需要发送邮件,提供一个认证的邮箱帐号和密码是很常见的。但是,有的客户方是内网直连邮箱服务器的,不需要通过帐号密码认证发送邮件,这样的话,理论上将 mail.smtp.auth 属性配置为 false 就可以了。 mail.smtp.auth 是控制邮件发送是是否需要进行登录认证的: true 表示需要身份验证 false 表示不需要身份验证 通过 JavaMailSenderImpl 的 setJavaMailProperties 方法来设置该属性。 JavaMailSe

qq_34777858的博客 3564

基于Java与MySQL的柑橘类水果管理系统设计与实现

在各类信息管理系统中,基于Java技术栈的桌面端应用始终是课程设计与毕业设计的经典方向。系统开发的核心在于理解分层架构、数据库建模与业务逻辑的衔接:通过Java Swing构建交互界面,借助MySQL存储业务数据,利用JDBC实现持久化访问,并遵循entity-dao-service-ui的分层思想,能有效提升代码可维护性与扩展性。事务处理保证入库、出库等关键操作的数据一致性,而合理的表结构设计如独立库存表、批号管理则体现了空间换时间的工程取舍。这类系统在农产品流通、仓储管理等场景中具有广泛适用性。本文以柑

weixin_33290540的博客 259

java使用smtp协议发送邮件注意的问题

公司经常遇到发送邮件的问题,普通邮件发送就不说了,说一下无账号密码发送邮件的过程,在这里总结一下: 邮件收发协议:发送邮件使用smtp协议,收取邮件使用pop或imap协议;这里我们只讲发送邮件的smtp协议; smtp发送邮件过程 这部分说明是从网上摘抄的,写的很详细,我就贴过来修改了一下: 使用smtp协议发送邮件给邮件服务器时规定了要做以下几件事:   1、使用"ehlo"命令和连...

zqz_zqz的博客 2万+

SPSSAU 中介效应分析实战:Bootstrap 95%置信区间解读的3个关键步骤

本文详细解析了SPSSAU中介效应分析中Bootstrap 95%置信区间的解读方法,涵盖三种典型场景的判别标准与应对策略。通过实战操作指南,帮助研究者准确判断中介效应显著性,特别针对边界模糊和小样本情况提供专业建议,提升统计分析结果的可靠性。

weixin_33691817的博客 502

JA4 TLS指纹:反爬攻防下沉至网络层的实战指南

TLS指纹是识别客户端网络栈特征的基础安全概念,其原理源于对TLS 1.3/1.2握手阶段Client Hello明文字段的结构化提取与哈希编码。相比依赖JavaScript执行环境的传统浏览器指纹,TLS指纹具备更高稳定性与更低伪造性,技术价值在于绕过前端混淆、直击爬虫底层网络协议栈。典型应用场景包括电商风控、金融反欺诈及招聘平台数据防护,尤其适用于对抗高仿真无头浏览器与通用HTTP库爬虫。本文聚焦JA4这一工业级TLS指纹标准,深入解析其字段逻辑、Nginx原生集成方案及与JA4S/JA4X的纵深协同机

weixin_33675507的博客 866

配置Mail使用SMTP发送邮件

今天分享在Linux上使用mail命令通过SMTP对外发邮件。  mail、mailx和sendmail  先看一下三者的关系:mail是mailx的别名,最初叫nail(与arch linux目前用的S nail基因相同);mail是Heirloom的一个子项目,sendmail是Eric Allman的作品,都是开源项目;mail是用户代理(客户端),sendmail是邮件传输代理(服务器);...

u012662731的博客 4万+

uniapp - [全端兼容] 高性能 tabbar 底部菜单凸起效果,原生系统自定义底部菜单不卡顿、切换页面不闪烁、自动缓存页面(底部菜单中间自定义一个图片并悬浮起来)

uniapp如何实现底部凸起按钮,uniapptabbar底部菜单怎么自定义,uniapp怎么让底部菜单中间突出来,uniapp自定义底部tabbar,uniapp高性能好用的底部菜单,uniapp自定义底部导航栏并解决闪烁问题,uniapp怎么设置凸起的底部tabbar,uniapp怎么用系统的底部菜单还想让中间的按钮凸起来,uniapp自定义tabbar性能不好怎么办,uni-app自定义导航栏实现中间凸起效果,uniapp底部导航栏中间圆形按钮凸起效果详细代码,uni-app自定义中间图标突起的

🏆 前端领域优质创作者 1万+

javaMail 发送邮件遇到的一些问题

Illegal address 该邮件地址不正确 邮件服务器不正确 java.net.SocketTimeoutException: Read timed out 超时异常。 通过mail.smtp.timeout来设置超时时间,它的单位是毫秒。 mail.smtp.timeout =3000 javax.mail.AuthenticationFailedException: 535 Err...

my博客 1万+

Python爬虫实战:高效爬取中国专利数据库的完整指南

在当今信息爆炸的时代,专利数据作为技术创新的重要指标,对企业研发、市场分析和学术研究都具有极高价值。中国作为全球专利申请量最大的国家,其专利数据库包含了海量的技术创新信息。本文将详细介绍如何使用Python最新技术构建一个高效、稳定的中国专利数据库爬虫系统。中国专利数据库主要由国家知识产权局(CNIPA)维护,包含发明专利、实用新型专利和外观设计专利三大类。截至2023年,中国专利数据库已收录超过400万件发明专利和300万件实用新型专利。

2201_76125261的博客 1575

【AI编程】Trae 环境搭建与配置从使用到项目实战详解

Trae 环境搭建与配置从使用到项目实战详解

congge 5652

JAVA代码实现发送邮件(使用mail.jar)

文章目录前言J2EE前台发送邮件代码实现下载并加载JavaMail API总结 前言 今天跟大家分享一篇,发送电子邮件的博文 使用了java+jsp+servlet 源码可在下方链接下载 提取码:5c0x https://pan.baidu.com/s/1QfhJRHP5stQY_sKShBb6pw. 实现功能以下!! 1、 J2EE前台发送邮件 2、Java代码后台实现发送邮件 J2EE前台发送邮件 我们以结果为导向 运行截图 手机接收到的邮件 代码实现 1.新建Dynamic Web Proj

licmi的博客 4768

【ComfyUI】Wan2.2 Animate 背景保留动作迁移视频生成

本文介绍了一个基于ComfyUI的高精度视频生成工作流"Wan2.2 Animate",该系统融合动作捕捉、图像拼接和LoRA加权等技术,能自动识别人脸并完成精准动作迁移,同时保持背景稳定。工作流采用模块化设计,包含输入提取、图像融合、模型加载等关键节点,核心模型Wan2.2-Animate-14B支持fp8精度与BlockSwap控制。流程分为图像输入、动作提取、多图合成等五个阶段,通过文本提示编码器和图像语义编码器实现语义驱动的动作生成,最终输出高质量视频,适用于虚拟形象驱动和

Mr数据杨 2280

基于SMTP协议的模拟邮件系统(计算机网络课程设计)

一款基于smtp协议的模拟邮件系统,感兴趣就点进来看看叭!

白洞,白色的明天在等着我们 6118

修改legged_gym地形后仍然是平地,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1568

SPMI总线协议(一)

系统电源管理接口( System Power Management Interface简称SPMI)是一种双线串行接口,用于连接片上系统(SoC)处理器系统的集成电源控制器(PC)与一个或多个电源管理集成电路(PMIC)电压调节系统。SPMI 使系统能够使用单个 SPMI 总线动态调整 SoC 内部电压域的电源和衬底偏置电压。移动设备和其他便携式设计正日益采用系SPMI)协议,实现多主多从系统,根据实时系统需求监测和动态控制供电电压。设计人员可以在系统级实现更低的功率。

qflook的博客 890

java web邮箱验证

我们的日常生活中用到很多用户注册啦之类的,为了提高安全性和用户体验,我们也会遇到邮箱通过邮箱确定验证信息的例子。 首先我们看一下需要哪些jar包,其中activation.jar和mail.jar是邮件发送不可少的,servlet和jstl在程序中也有用到,所以大家先将jar包导入项目中区。 然后就是我们查看邮箱smtp的服务器地址 下面就是我们的代码 类 Regis

yuehailin的博客 2503

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

《黑马旅游网》综合案例源码+分析

1 前言 为了巩固web基础知识,提升综合运用能力,故而讲解此案例。要求,每位同学能够独立完成此案例。 2 项目导入 点击绿色+按钮 选择travel项目的pom.xml文件,点击ok,完成项目导入。需要等待一小会,项目初始化完成。 3 启动项目 3.1 方式一: 3.2 方式二:配置maven快捷启动 4 技术选型 4.1 Web层 a) Servlet:前端控制器 b) html:视图 c)...

qq_44727672的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

带你去旅行——基于Web的旅游网站

一、核心技术 1、Web层 1>servlet:前端控制器 2>html :视图 3>Filter :过滤器–>解决乱码问题 4>BeanUtil:数据封装 5>Jackson:json序列化工具,ajax一步提交表单,完成校验 2、Service层 1>Javamail:java发送邮件工具 2>Redis:NoSQL内存数据库 3>Jed...

qq_43847542的博客 5899

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

旅游网

旅游网 day01 互联网的项目为了访问速度快一般直接使用html进行页面的展示,而内部的OA等可以使用jsp,访问人员较少,jsp不会太多影响性能 一.首先进行一个架构及使用的技术的分析,三层架构 web层 1.servlet前端控制器 2.filter进行编码的过滤 过滤器 3.BeanUtils将查询的数据封装成对象 封装工具 4.jackson 将对象系列化成Json字符串返回给前端 ...

wwzzh1989的博客 377

黑马旅游网项目详细思路和完整代码整理 -附源码

前言 由于新冠病毒的原因,无法上学。百无聊赖之下自己开始看视频学习,跟着视频做完了这个项目来检验学习成果,写篇博客来记录一下。话不多说,开始正题。 技术选型 表示层(web) 1. HTML、CSS、JS、JQuery、Ajax 2. Servlet 前端控制器 3. Filter 过滤器 4. BeanUtils 数据的封装工具类 5. JackSon Json数据序列化工具 业务逻...

qq_41910976的博客 2万+

day48 JavaWeb阶段——综合案例:黑马旅游网 (含源码及所需maven数据仓库)

《黑马旅游网》综合案例 1 前言 为了巩固web基础知识,提升综合运用能力,故而讲解此案例。要求,每位同学能够独立完成此案例。 2 项目导入 点击绿色+按钮 选择travel项目的pom.xml文件,点击ok,完成项目导入。需要等待一小会,项目初始化完成。 3 启动项目 3.1 方式一: 3.2 方式二:配置maven快捷启动 4 技术选型 4.1 Web层 a) Servlet:前端...

qq_38454176的博客 2624

javaMail 发送邮件遇到的奇葩问题Invalid Addresses

一个发邮件的服务 mail.smtp.auth=true 这个配置 设置为true时,就能正常发送 设置为false时,就报错 org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: Invalid Addresses; nested exception is: 也是很神奇的一件事 设置true时:(需要进行用户名授权码验证),测试邮件发送时报错。 报错的原因可

qianqian的博客 1万+
上一篇: javascript常用技巧
下一篇: 优快云 Bug 请管理员检查
JavaAlpha
博客等级 码龄18年 910粉丝 511原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值