`
44424742
  • 浏览: 232505 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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<host><from><to><name><pass><subject><content>");
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()主类,再加入发送附件和群发邮件的功能,那么将是一个完整的邮件发送客户端程序。 
分享到:
评论

相关推荐

    java socket实现smtp发送邮件,支持SSL

    2. 设置SMTP服务器的属性,包括主机名、端口、身份验证等: ```java Properties props = new Properties(); props.put("mail.smtp.host", "smtp.qq.com"); // QQ邮箱的SMTP服务器 props.put("mail.smtp.port", ...

    james和javamail实现邮件收发(带发送附件)

    在此过程中,JavaMail会与SMTP服务器建立连接,验证身份(如果需要),并传输邮件。 对于邮件接收,JavaMail API同样提供了`Store`接口,可以连接到邮件服务器(如James)的邮箱,获取和处理新邮件。这通常涉及以下...

    JavaMail实现源代码和jar包

    5. **MyAuthenticator.java**:这个文件可能定义了一个自定义的认证类,用于处理邮件服务器的身份验证。在某些情况下,邮件服务器可能需要用户名和密码进行授权,这时 `MyAuthenticator` 类会继承 `javax.mail....

    javaMail实现发送邮件的demo

    在上述代码中,我们使用了 `Session` 类来建立与 SMTP 服务器的连接,并通过 `Authenticator` 实现了身份验证。`MimeMessage` 类用于创建邮件对象,我们可以设置发件人、收件人、主题和正文。最后,`Transport.send...

    JavaMail实现真实的收发邮件系统

    在实际操作中,可能需要处理异常,如网络问题或身份验证失败等。 3. **在Struts中整合JavaMail**: - **创建Action**:定义一个Struts Action类,该类包含发送邮件的方法。在方法内部调用JavaMail API发送邮件。 ...

    javamail问题及解决方案

    这表明JavaMail将启用SMTP身份验证。然后,通过自定义`MyAuthenticator`类实现身份验证: ```java MyAuthenticator myauth = new MyAuthenticator("用户名", "密码"); Sessions session = Session....

    Java web中javamail邮件发送实现案例.docx

    ` 表示开启SMTP身份验证。 - `prop.put("mail.smtp.host", "smtp.163.com");` 指定SMTP服务器地址,这里以163邮箱为例。 - `prop.put("mail.user", "cff233926@163.com");` 设置发件人邮箱地址。 - `prop.put(...

    Java编程实现邮件发送(含身份验证)

    总之,Java编程实现邮件发送含身份验证是一个涉及网络编程、SMTP协议、JavaMail API和身份验证等多个知识点的综合任务。通过理解并应用这些概念,你可以创建一个可靠的邮件发送系统,满足各种业务需求。

    使用javaMail实现收发邮件

    在此之前,可能需要设置认证信息,尤其是当SMTP服务器需要身份验证时。 接收邮件的过程相对复杂,涉及到连接邮件服务器、打开邮箱存储、获取邮件夹以及遍历邮件消息。你可以使用`Store`对象来连接邮件服务器,然后...

    javamail的jar包:javamail-1.6

    7. **认证机制**:JavaMail 支持多种身份验证机制,包括基本认证、NTLM、DIGEST-MD5等,以适应各种安全需求。 8. **邮件会话和属性**:邮件会话是JavaMail的核心概念,它封装了与邮件服务器交互所需的所有配置信息...

    用javamail实现邮件发送-完整源码

    3. 登录并创建 Transport:使用 `Session` 创建 `Transport` 对象,然后通过 `Authenticator` 进行身份验证: ```java Session session = Session.getInstance(props, new Authenticator() { protected ...

    用Java Socket实现SMTP邮件发送

    2. 身份验证:发送EHLO或HELO命令告知服务器客户端的身份,并可能进行身份验证(如AUTH PLAIN, LOGIN等)。 3. 发送邮件:使用MAIL FROM命令指定发件人地址,使用RCPT TO命令指定收件人,然后使用DATA命令发送邮件...

    用java socket实现smtp邮件发送,支持SSL

    在实际开发中,为了简化这些操作,我们可以利用JavaMail API,它提供了一个更高级别的接口来处理SMTP邮件发送,同时支持SSL/TLS。不过,直接使用Socket编程能让我们更好地理解邮件发送的底层工作原理。 在提供的...

    javamail-1.4.5(javamail完整开发包)

    对于需要身份验证的邮件服务器,JavaMail 支持多种认证方式,如 PLAIN、LOGIN、CRAM-MD5 和 DIGEST-MD5。 8. **示例程序**: 压缩包中的示例程序可以帮助开发者快速理解如何使用 JavaMail API 实现各种邮件操作,...

    JavaMail完整JAR包

    此外,对于需要身份验证的邮件服务器,JavaMail可以通过提供用户名和密码来实现。 7. **邮件附件**: - `Multipart` 类用于创建包含多个部分的邮件,比如文本、HTML和附件。`MimeBodyPart` 和 `MimeMultipart` 类...

    JavaMail配置SSL服务器及安装证书

    4. **SSL证书**: SSL证书包含公钥和私钥对,用于身份验证和加密。服务器证书由受信任的证书颁发机构(CA)签发,以证明服务器的身份。安装证书到Java的信任存储库是连接到SSL服务器的关键步骤。 5. **InstallCert...

    利用JavaMail实现邮件的收取.doc

    通过 `System.getProperties()` 获取系统属性,并设置邮件服务器的主机名(`mail.smtp.host`)和是否启用身份验证(`mail.smtp.auth`)。然后通过 `Session.getDefaultInstance()` 创建一个默认的会话实例。 2. ...

    用javamail实现邮件发送-完整源码-之前的那个资源变成50分一次下载了,所以重新上传一个,让大家能下载

    例如,某些服务器可能需要启用TLS/SSL,或者使用特定的身份验证方式。 总之,JavaMail是一个强大且灵活的库,可以帮助开发者轻松地在Java应用中实现邮件功能。提供的源码示例将帮助初学者快速理解并掌握JavaMail ...

    用Java实现SMTP服务器.doc

    在Java中实现SMTP服务器功能,开发者还需要熟悉Java的网络编程API,如`java.net.Socket`和`java.io`包中的类,以及可能的第三方库,如Apache Commons Net或JavaMail API,来简化SMTP通信。同时,为确保程序的稳定性...

    javamail-1.4.7.7z

    4. **认证机制**:在处理需要身份验证的邮件服务器时,JavaMail 支持包括SMTP AUTH在内的多种认证方式,如简单的用户名和密码、NTLM或OAuth2。 5. **会话和属性**:JavaMail 中的`Session`对象是所有邮件操作的基础...

Global site tag (gtag.js) - Google Analytics