现在大多数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身份认证相关推荐

  1. java mail 接收邮箱163_JavaMail实现简单邮件开发——163邮箱

    1.打开 P0P3/SMTP/IMAP 2.开发工具类 CodeUtils.java package com.demo.mymail.utils; import java.util.UUID; pub ...

  2. smtp服务认证过程

    事先声明,整个过程以LOGIN认证方式为例,其他认证方式大同小异.按照时间顺序,主要分为22个步骤. 1.客户端TCP连接服务器25端口; 2.三次握手以后,连接建立成功,服务器主动推送服务就绪信息 ...

  3. JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案

    问题分析 通过HttpClient获取网页数据源,通过Jsoup解析数据.先模拟登录统一身份认证平台,再通过单点登录方式登录正方教务系统,最后获取相关信息.模拟浏览器正常操作,封装请求头信息获取SES ...

  4. Security - 轻量级Java身份认证、访问控制安全框架

    前言 此框架由小菜独立开发,并且已经在生产环境中运行大约一年时间. 也就是说,Security 框架写出来有一段时间了,但是一直没有公布.开源,经过不断迭代完善,终于算是拿得出手啦~ Security ...

  5. java 发送邮件553错误_使用Java Mail API发送邮件,抛出认证错误553 authentication is required. 解决办法...

    转载原文:https://blog.csdn.net/sun2015_07_24/article/details/52074898 在使用Java Mail API的过程中,抛出553 authent ...

  6. [附源码]java毕业设计网络身份认证技术及方法

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  7. 如何在 Exchange Online 中对指定邮箱账户启用 SMTP 基本身份认证?

    启用SMTP基本认证 设置 SmtpClientAuthenticationDisabled 为 false 创建允许基本身份验证的策略,并将其链接到这个邮箱 SMTP 身份验证不安全,应在实际使用中 ...

  8. 关于.NET的SMTP的问题:如不支持ESMTP(身份认证)等等

      或许大家会很失望,为什么.NET的SMTP不支持ESMTP(身份认证),现在哪个SMTP不需要身份认证吖?真郁闷,微软老是喜欢做这种鸡肋. 刚开始要用.NET的SMTP,那已经是2002年的事情了 ...

  9. java 模拟天眼查登陆,基于Java卡的身份认证方法专利_专利申请于undefined_专利查询 - 天眼查...

    1.一种基于Java卡的身份认证方法,包括java卡片与卡外实体,分别含有加密数据和 密钥,其特征在于,对加密数据和密钥拆进行如下操作步骤: (1) 拆分:分别将加密数据和密钥拆分为多段数据,之后将某 ...

  10. 【java】基于JWT的token身份认证方案

    1.概述 转载:基于JWT的token身份认证方案 2.使用JSON Web Token的好处 2.1 性能问题 验证信息可以由前端保存,后端不需要为保存token消耗内存.JWT方式将用户状态分散到 ...

最新文章

  1. 野火开发版屏幕_鸿蒙OS手机版正式发布!副总裁现场表态:我们已经准备好了...
  2. bzoj4403-序列统计【Lucas,组合数学】
  3. 20165203 2017-2018-2 《Java程序设计》第一周学习总结
  4. Retroifit原理
  5. Shell编程:简洁的 Bash Programming 技巧
  6. 程序员经常看的开源月刊《HelloGitHub》第 57 期
  7. Linux (Ubuntu) 命令
  8. windows 搭建Web服务器和连接局域网打印机
  9. TCP-丢包率【传输中所丢数据包数量占发送数据包的比率=(输入报文-输出报文)/输入报文】【TCP只保证传输层消息可靠,并不保证应用层的消息可靠。想保证应用层的消息可靠性,需应用层自己实现逻辑做保障】
  10. Vue中引用图片动态背景图片
  11. 极海单片机串口调试记录
  12. 配置 Windows Server 2008 R2 DNS 服务器
  13. java画太极加图片_新手初学java 尝试编程绘画太极图
  14. macOS系统和mac装Windows系统开启虚拟化
  15. 关于单应性矩阵的理解:Homography matrix for dummies
  16. 事件触发过程(事件流)
  17. oracle期间平均成本,小李飞刀系列之Oracle EBS期间平均成本(PAC)--生产成本计算(四)制造费用设置及成本计算...
  18. 解读最佳实践:倚天710 ARM芯片的 Python+AI 算力优化
  19. 【第一篇】学习与奋斗,不努力就会与社会脱节
  20. easybuy项目总结_20180409

热门文章

  1. 嘿~全流程带你基于Pytorch手撸图片分类“框架“--HuClassify
  2. 企业微信发送、撤回消息 java代码
  3. 动词ing基本用法_动词ing的几种常见用法
  4. win10系统点击开始菜单没反应
  5. 2百度元老结论:web2.0创业时代将终结
  6. 7号团队-团队任务5:项目总结会
  7. 竞价推广过程中最难的问题是什么?
  8. Photoshop制作banner步骤过程
  9. locale 国际化配置(springboot)
  10. JVM学习笔记(12) 垃圾回收-垃圾回收相关算法