java+mail+authen_javamail实现smtp身份认证
现在大多数smtp服务器都需要身份认证,若用javamail写一个邮件收发客户端,怎么来实现这种功能呢?下面是个简单的列子,模拟foxmail对认证功能的实现。
package jmail;
import javax.mail.*;
import java.util.*;
import java.sql.*;
import javax.swing.*;
import java.awt.*;
public class MailAuthenticator extends Authenticator{
String authenName; //用户名
String authenPass; //密码
public MailAuthenticator(String authenName,String authenPass) {
super();
this.authenName=authenName;
this.authenPass=authenPass;
}
public PasswordAuthentication getPasswordAuthentication(){ /*若服务器需要身份认证,Sission会自动调用这个方法
String temp=null;
if(authenPass.equals("")||authenPass==null){ /*若密码为空*/
Option op=new Option(null,"身份验证",true); /*弹出需要用户输入密码的对话框,Option是自定义的JDialog,包含一个密码域*/
temp=op.showDialog(); /*Option的返回输入的密码*/
authenPass=temp;
}
return new PasswordAuthentication(authenName,authenPass);
}
}
/* 下面是Option 类,jbuilder里写的,无须解释*/
package jmail;
import java.awt.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
import java.awt.event.*;
public class Option extends JDialog {
JPanel panel1 = new JPanel();
JLabel jLabel1 = new JLabel();
XYLayout xYLayout1 = new XYLayout();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JPasswordField jPasswordField1 = new JPasswordField();
JLabel jLabel2 = new JLabel();
JLabel jLabel3 = new JLabel();
Icon forget=new ImageIcon(".\images\forget.gif");
boolean ok=false;
JLabel jLabel4 = new JLabel();
JLabel jLabel5 = new JLabel();
public Option(Frame frame, String title, boolean modal) {
super(frame, title, modal);
try {
jbInit();
pack();
}
catch(Exception ex) {
ex.printStackTrace();
}
}
public Option() {
this(null, "", false);
}
private void jbInit() throws Exception {
panel1.setLayout(xYLayout1);
jLabel1.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel1.setText("密码:");
jButton1.setFont(new java.awt.Font("Dialog", 0, 12));
jButton1.setDoubleBuffered(false);
jButton1.setText("确定");
jButton1.addActionListener(new Option_jButton1_actionAdapter(this));
jButton2.setFont(new java.awt.Font("Dialog", 0, 12));
jButton2.setText("取消");
jButton2.addActionListener(new Option_jButton2_actionAdapter(this));
jLabel2.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel2.setHorizontalTextPosition(SwingConstants.TRAILING);
jLabel2.setIcon(forget);
jLabel2.setText("");
jLabel3.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel3.setText("服务器需要身份认证, 请输入密码");
panel1.setToolTipText("");
jLabel4.setText(" ");
jLabel5.setText(" ");
getContentPane().add(panel1, BorderLayout.CENTER);
panel1.add(jLabel4, new XYConstraints(189, 61, -1, -1));
panel1.add(jLabel2, new XYConstraints(15, 1, 67, 19));
panel1.add(jLabel3, new XYConstraints(15, 22, -1, -1));
panel1.add(jPasswordField1, new XYConstraints(48, 46, 140, -1));
panel1.add(jLabel1, new XYConstraints(15, 48, -1, -1));
panel1.add(jButton1, new XYConstraints(46, 79, 58, 22));
panel1.add(jButton2, new XYConstraints(112, 79, 58, 22));
panel1.add(jLabel5, new XYConstraints(85, 102, -1, 12));
this.getRootPane().setDefaultButton(jButton1);
this.setSize(220,130);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((int)screenSize.getWidth()/2-80,(int)screenSize.getHeight()/2-50);
}
void jButton1_actionPerformed(ActionEvent e) {
ok=true;
this.dispose();
}
void jButton2_actionPerformed(ActionEvent e) {
ok=false;
this.dispose();
}
public String showDialog(){
show();
if(ok)return new String(jPasswordField1.getPassword());
else return null;
}
}
class Option_jButton1_actionAdapter implements java.awt.event.ActionListener {
Option adaptee;
Option_jButton1_actionAdapter(Option adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
class Option_jButton2_actionAdapter implements java.awt.event.ActionListener {
Option adaptee;
Option_jButton2_actionAdapter(Option adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton2_actionPerformed(e);
}
}
/*下面写一个发送邮件主类,利用上面的MailAuthenticator类来提供身份验证 */
package jmail;
import javax.mail.*;
import javax.mail.internet.*;
import javax.swing.*;
import java.io.*;
import javax.activation.*;
import java.util.*;
public class SendMail{
public static void main(String[] args) {
String host="";
String from="";
String to="";
String name="";
String pass=null;
String subject="";
String content="";
MailAuthenticator ma;
if(args.length<6){ /*小于6,先不输入密码,发送过程服务器需要认证时就会跳出密码输入框(Option类)*/
System.out.println("enter");
System.exit(0);
}
else {
host=args[0]; /*smtp服务器*/
from=args[1]; /*发件人*/
to=args[2]; /收件人*/
name=args[3]; /*smtp认证用户名,一般跟pop3登录相同*/
subject=args[4]; /*邮件主题*/
content=args[5]; /*邮件内容*/
}
try{
ma=new MailAuthenticator(name,pass);
Properties props=System.getProperties();
props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true"); /*服务器需要认证*/
Session session=Session.getInstance(props,ma); /*Session会自动调用getPasswordAuthentication()方法*/
MimeMessage msg=new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipient(Message.RecipientType.TO,new InternetAddress(to));
msg.setSubject(subject);
msg.setText(content);
msg.setSentDate(new java.util.Date());
Transport.send(msg);
System.out.println("Send Email Success");
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
能够自己写个UI界面的SendMail()主类,再加入发送附件和群发邮件的功能,那么将是个完整的邮件发送客户端程式。
阅读(545) | 评论(0) | 转发(0) |
java+mail+authen_javamail实现smtp身份认证相关推荐
- java mail 接收邮箱163_JavaMail实现简单邮件开发——163邮箱
1.打开 P0P3/SMTP/IMAP 2.开发工具类 CodeUtils.java package com.demo.mymail.utils; import java.util.UUID; pub ...
- smtp服务认证过程
事先声明,整个过程以LOGIN认证方式为例,其他认证方式大同小异.按照时间顺序,主要分为22个步骤. 1.客户端TCP连接服务器25端口; 2.三次握手以后,连接建立成功,服务器主动推送服务就绪信息 ...
- JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案
问题分析 通过HttpClient获取网页数据源,通过Jsoup解析数据.先模拟登录统一身份认证平台,再通过单点登录方式登录正方教务系统,最后获取相关信息.模拟浏览器正常操作,封装请求头信息获取SES ...
- Security - 轻量级Java身份认证、访问控制安全框架
前言 此框架由小菜独立开发,并且已经在生产环境中运行大约一年时间. 也就是说,Security 框架写出来有一段时间了,但是一直没有公布.开源,经过不断迭代完善,终于算是拿得出手啦~ Security ...
- java 发送邮件553错误_使用Java Mail API发送邮件,抛出认证错误553 authentication is required. 解决办法...
转载原文:https://blog.csdn.net/sun2015_07_24/article/details/52074898 在使用Java Mail API的过程中,抛出553 authent ...
- [附源码]java毕业设计网络身份认证技术及方法
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- 如何在 Exchange Online 中对指定邮箱账户启用 SMTP 基本身份认证?
启用SMTP基本认证 设置 SmtpClientAuthenticationDisabled 为 false 创建允许基本身份验证的策略,并将其链接到这个邮箱 SMTP 身份验证不安全,应在实际使用中 ...
- 关于.NET的SMTP的问题:如不支持ESMTP(身份认证)等等
或许大家会很失望,为什么.NET的SMTP不支持ESMTP(身份认证),现在哪个SMTP不需要身份认证吖?真郁闷,微软老是喜欢做这种鸡肋. 刚开始要用.NET的SMTP,那已经是2002年的事情了 ...
- java 模拟天眼查登陆,基于Java卡的身份认证方法专利_专利申请于undefined_专利查询 - 天眼查...
1.一种基于Java卡的身份认证方法,包括java卡片与卡外实体,分别含有加密数据和 密钥,其特征在于,对加密数据和密钥拆进行如下操作步骤: (1) 拆分:分别将加密数据和密钥拆分为多段数据,之后将某 ...
- 【java】基于JWT的token身份认证方案
1.概述 转载:基于JWT的token身份认证方案 2.使用JSON Web Token的好处 2.1 性能问题 验证信息可以由前端保存,后端不需要为保存token消耗内存.JWT方式将用户状态分散到 ...
最新文章
- 野火开发版屏幕_鸿蒙OS手机版正式发布!副总裁现场表态:我们已经准备好了...
- bzoj4403-序列统计【Lucas,组合数学】
- 20165203 2017-2018-2 《Java程序设计》第一周学习总结
- Retroifit原理
- Shell编程:简洁的 Bash Programming 技巧
- 程序员经常看的开源月刊《HelloGitHub》第 57 期
- Linux (Ubuntu) 命令
- windows 搭建Web服务器和连接局域网打印机
- TCP-丢包率【传输中所丢数据包数量占发送数据包的比率=(输入报文-输出报文)/输入报文】【TCP只保证传输层消息可靠,并不保证应用层的消息可靠。想保证应用层的消息可靠性,需应用层自己实现逻辑做保障】
- Vue中引用图片动态背景图片
- 极海单片机串口调试记录
- 配置 Windows Server 2008 R2 DNS 服务器
- java画太极加图片_新手初学java 尝试编程绘画太极图
- macOS系统和mac装Windows系统开启虚拟化
- 关于单应性矩阵的理解:Homography matrix for dummies
- 事件触发过程(事件流)
- oracle期间平均成本,小李飞刀系列之Oracle EBS期间平均成本(PAC)--生产成本计算(四)制造费用设置及成本计算...
- 解读最佳实践:倚天710 ARM芯片的 Python+AI 算力优化
- 【第一篇】学习与奋斗,不努力就会与社会脱节
- easybuy项目总结_20180409
热门文章
- 嘿~全流程带你基于Pytorch手撸图片分类“框架“--HuClassify
- 企业微信发送、撤回消息 java代码
- 动词ing基本用法_动词ing的几种常见用法
- win10系统点击开始菜单没反应
- 2百度元老结论:web2.0创业时代将终结
- 7号团队-团队任务5:项目总结会
- 竞价推广过程中最难的问题是什么?
- Photoshop制作banner步骤过程
- locale 国际化配置(springboot)
- JVM学习笔记(12) 垃圾回收-垃圾回收相关算法