迟到的javamail暑假总结

Javamail-期待你的更新(网络二班团支部暑假总结)

         ---------------------------I's a small step, tomorrow a big step

A杂谈:

  暑假安排了第一个java项目,做一个邮件发送软件,制作的软件拖了很久也没发布,虽然做的不尽人意,但总算是我们走出了第一步。

  这次不成功的原因可以总结许多的原因:其一,java知识点太多,导致许多知识点不理解;其二,由于暑假期间,大家个忙各的,交流起来不是很方便;其三,也是最重要的分工不明确,许多同学都不知道,或者就根本不没参与讨论。然而,这毕竟是第一次安排,有错误是可以理解的,况且在项目中也有所收获。

期待:

期待大家能将其功能不断完善,现在做的仅仅是一个小小的模型,还有许多功能有待完善,例如:接收邮件,发送图片,网页文件,接收图片文件,网页文件,有精力还可以加上音乐播放器,定时关机功能,不积跬步无以至千里,不积小流无以成江海。今天的一小步,明天一大步。

参考资料:图书馆张孝祥 《java邮件开发详解》

网络视频:张孝祥 《java邮件开发详解》

B:项目分析:

注意两个事项:第一打开你的telnet功能,第二如果要用QQ服务器直接到QQ空间打开smtp功能。其他服务器也一样。

第一种,直接通过DOS命令,放送邮件。

首先,我们可以通过telnet命令(黑客常用命令),telnet常用于远程连接(telnet的详细解释:http://baike.baidu.com/view/44255.htm),格式如下:

Telnet  smtp.qq.com  25  这样就可以连接到qq的服务器,但是微软为了安全起见,

Telnet是默认为“未启动”,如果想启动,步骤如下:控制面板--->程序--->程序和功能-->打开或关闭windows功能-->打开找到telnet客户端,把这2项都勾选上,然后确定就可以了.

连接到qq的服务器以后,由于我们的个人PC并没有在网络中作为一个服务器注册,所以我们借用了qq的服务器发送邮件,我们正常连接QQ,需要登录名和密码,同理,这也一样,需要这些,但我们要注意在这操作的过程中,登录名和密码是通过BASE64编码的,登录以后,我们就可以遵寻smtp协议放送消息了(smtp协议详细解释如下:http://baike.baidu.com/view/5450.htm)

连接后如下图:

(我们可以通过此连接到任何一个服务器,同时哈佛的著名服务器clond.cs50.net,我们也可以连接,只是要注意端口不一样,哈佛的是80

 

第二步:

当连上以后,你就的放松一个消息给qq服务器了,ehco  ouyang-pc ehco后面的参数是是任意的,键入命令后,出现如图所示:这都是smtp的一些格式,想要了解可以打开上面smtp介绍的链接,或者到图书馆借阅张孝祥 《java邮件开发详解》.

 第三步:

通过键入命令:auth login登录

这此要注意第一个334下面的是登录名,第二个就是密码,这需要你的键入,我键入的是我的qq登录名,与密码注意successful表示已登录成功了。现在你可以发送你的消息了,

发送消息先用mailfrom告诉对方你的邮件地址,其次再rcpt to 告诉服务器发送到哪里,再接着告诉其内容。想要成功发送还要你自己了。(为什么键入的密码不是正确的格式,因为我们这是通过了上面所说的BASE64编码的,java 实现BASE64编码十分简单,代码如下:

我们可以用此方式分别得到登录名,与密码的BASE64编码

/* (程序头部注释开始)  

* 程序的版权和版本声明部分  

* Copyright (c) 2011, 华北科技大学计算机学院学生   

* All rights reserved.  

* 文件名称:  javamail                     

* 作    者:   欧阳松柏                               

* 完成日期:   2012 年  10  月 08 日  

* 版 本 号:   2.0         

  

* 对任务及求解方法的描述部分  

* 输入描述:   

* 问题描述:   

* 程序输出:   

* 程序头部的注释结束  

*/ 

import java.util.*;

import sun.misc.*;

public class Bianma {

public static void main(String[] args) {

       

             Scanner  sca=new  Scanner(System.in);

             BASE64Encoder  encoder=new  BASE64Encoder();

             String  a;

             System.out.println("请输入:");

             a=sca.next();

             System.out.println("编码后:"+encoder.encode(a.getBytes()));

             }

}

第二种,原理与第一种一样。

只是这是以代码方式发送邮件的,并且有一个小界面。要理解代码是怎么实现的,请参考张孝祥 《java邮件开发详解》

代码如下:
/* (程序头部注释开始)  
* 程序的版权和版本声明部分  
* Copyright (c) 2011, 华北科技大学计算机学院学生   
* All rights reserved.  
* 文件名称: javamail1                   
* 作    者:   欧阳松柏                               
* 完成日期:   2012 年  10  月 07 日  
* 版 本 号:   2.0         
  
* 对任务及求解方法的描述部分  
* 输入描述:   
* 问题描述:   
* 程序输出:   
* 程序头部的注释结束  
*/ 
package ou;
import java.awt.*;
import java.awt.event.*;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import  javax.mail.internet.*;
import javax.swing.border.*;
import  javax.swing.*;
import  javax.swing.*;

import  java.util.*;

import  javax.activation.*;
import    java.awt.*;
public class Mail  extends  JFrame{

	
	
	
	JTextField  jt1,jt2;
	JLabel  jla1,jla2;
	JPanel  jp1,jp2;
	PoliceStation  police1,police2;
	public static void main(String[] args) {
		Mail  j=new  Mail();
		
	}
	
	public  Mail()
	{
		police1=new PoliceStation();
		police2=new PoliceStation();
		
		jp1=new JPanel();
		jp2=new JPanel();
		jla1=new JLabel("发送邮箱");
		jla2=new JLabel("接收邮箱");
		jt1=new JTextField(10);
		jt2=new JTextField(10);
		
		
		jp1.add(jla1 );
		jp1.add(jt1);
	
		jt1.addActionListener(police1);
		
		
		jp2.add(jla2);
		jp2.add(jt2);
		jt2.addActionListener(police2);
		this.add(jp1,BorderLayout.NORTH);
		this.add(jp2);
		
		this.setSize(200,300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
}
class  PoliceStation  implements  ActionListener
{
     
      private static final MimeMessage Transport = null;
  	static String  protocol="smtp";
  	static String  from;//发送邮件地址
  	static String  to="接收邮件地址";
  	     //    System.out.println(to);
  	static String  subject="邮件发送";
  	static String  body="欧阳松柏,你好吗?"; 
      
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		  from=e.getActionCommand();
		//  to=e.getActionCommand();
		  String  server="smtp.qq.com";
			String   user="791515672";
			String   pass="************";
			//获取系统的Properties
			
			Properties  props=new   Properties();
			//传输协议
			
			 props.setProperty("mail.transport.protocol", protocol);
			 // smtp 服务器都需要用户身份认证,所以这也要设置为 true
			 
			 props.setProperty("mail.transport.auth", "true");
		//先使用 Session 类中静态的 getInstance() 或getDefaultInstance() 获得自身对象,
			 //此时调用这两个方法应该传入上面创建的 Properties 对象;
			 
	     Session  session =Session.getDefaultInstance(props);
	     session.setDebug(true);
	   // 将 Sesson 对象作为参数创建 MimeMessage 对象
	     
	     MimeMessage  message=new   MimeMessage(session);
	     try {
			message.setFrom(new  InternetAddress(from));
			message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
			message.setSubject(subject);
			message.setText(body);
			   message.saveChanges();
			     Transport   transport = session.getTransport();
			     // 发送用户名、密码连接到指定的 smtp 服务器 
			     transport.connect(server, user, pass);
			     transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
			     transport.close(); 
		} catch (AddressException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (MessagingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

	  }
		
	}

发送后:

 

发送后:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值