Tuesday, January 08, 2008:
为了界面跟处理逻辑的分离,用到的两个类,SendTools 和SendMail
1:SendTools 工具类的分析:在这个类中引入的包。
Java.util.StringTokenizer:用来解析字符串 用在抄送附件这个方法中,用户可能输入多个抄送地址,我们要根据一定的符号来分解这一长串的字符串 让每一个抄送地址都分隔开。
Org.apache.commens.mail.HtmlEmail;是Apache下面的一个可以发送HTML格式的包,在进行非简单邮件发送的时候 用到这个包中的类。
Org.apache.commons.mail.SimpleEmail:如上,进行简单邮件发送的时候用到这个包中的类库。
为了方便 可以引入全类库 org.apache.commons.mail.*.
Javax.swing.ProgressMonitor:在设置进度条的时候,引入这个包。
2:工具类是一个不变类,不变类是没有状态的,而单实例是有状态的,而且是有很重要的状态,一般是一些需要共享的资源,比如系统的配置在。Java中,一个类有100个实例,会导致状态有100个拷贝,但方法在内存中只存储一次。一个不变类无论有多少个实例,它所含有的方法代码只会出现在内存中一次而已。 单例类非常容易被滥用,把不变类设计成单例类就是最常见的滥用。我这里就是一个滥用的例子,而且写的失败了,构造函数没有被初始化 导致在主类中调用工具类中的方法的时候 还要new 一个SendTools的对象,这里是非常非常失败的。
private static SendTools st;//在方法的最后 把SendTools的一个实例对象声明为private static。(问题在与 ,做了这异步 那么 把此类写成一个单实例类 就完全没有必要了,代码不简洁!)
3:在本程序中,为了在测试的时候节省时间,也能保证用户在一定时间内不会重复输入不变参数,我们需要写一个配置文件,读取到需要保存的录入参数,那么 即可以想到,需要用到三个方法,一个是创建配置文件,然后是把参数保存到配置文件中,最后是把参数从配置文件中读取出来 显示在界面上,能够保证在下一次开启程序的时候 之前输入的参数还能保存。
怎么样在生成一个配置文件?在哪里生成?配置文件的创建或者删除跟界面操作无关,自然会联想到在工具类中写一个方法来创建 。。接下来就开始创建。
写这个方法的思路:一个方法的产生只需要方法的类型 方法名 参数。这里声明了方法
Public File Config(),接下来就开始创建一个File类型的对象,给File起名,接下来判断,如果我们需要创建的文件是不存在的 那么就执行file.createNewFile(),这里netbeans会报告会抛出异常,那么只需要try catch一把,if 语句之外就按照既定的流程返回一个文件的对象,这个对象就是我们所创建的配置文件。
接下来再思考,这个文件对象我们是用来保存输入信息的,那么我们必须要把这个信息保存在配置文件之中,怎么去保存?我们设置一个事件监听器,当这个时间监听器被触发的时候 我们所需要保存的信息都会保存下来,那么可以用一个button按钮来作为监听器,也就是说在点击按钮的时候,就会得到我们想要的结果。
需要保存的参数是这些:smtp服务器,发件人地址,用户名,密码。
这个方法的思路是:在点击“保存参数”时,需要取得需要保存的参数,那么我们的方法声明就应该是public void saveParameterButton(String host,String,senderAddress,String username,String password),要把参数写入文件 ,需要实例化一个文件流对象,既然是写进去,那么就是OutputStream, java.io.OutputStream ops=new java.util.Properties();Propertis类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串.( 接下来,把所需要保存的值put进去,但是API是不建议这样用的,因为 Properties 继承于 Hashtable,所以可对 Properties 对象应用 put 和 putAll方法。但不建议使用这两个方法,因为它们允许调用者插入其键或值不是 String的项。相反,应该使用 setProperty 方法。如果在“不安全”的 Properties对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。类似地,如果在“不安全”的 Properties对象(即包含非 String 的键)上调用 propertyNames 或 list 方法,则该调用将失败)
这个方法完成之后,当我们点击“保存参数”的时候 ,这些参数都会被保存下来,但是,我们在运行的时候 会发现,并没有得到我们想要的结果,在第二次启动程序的时候仍然得不到上一次输入的这些参数,这是怎么回事呢?想想就应该知道,我们只是把东东写进去了,并没有在界面上读取出来,那么 我们就来完成这个部分的第三个方法,读取配置文件了。
这个方法的思路:我们把需要保存的参数 用一个list来装载,把数据都包装的好好的,然后取出来就一个不漏的取。所以在这个方法中 我们也要实例化一个list对象,
java.util.List readlist =new java.util.ArrayList();//因为List是一个抽象类 所以不能直接进行实例化,就实例化一个ArrayList().读取文件,那么就要创建一个输入流,把文件对象装进这个输入流,java.io.InputStream ips=new java.io.FileInPutStream(config()),记得要把这个输入流toString()一下,props.load(ips) 这个方法是从输入流中读取属性列表(键和元素对)。
Readlist.add(props.getProperty(“”));把取道的key加到readlist中,这样就over了
所有的方法都实现了 只需要在sendMail中来调用这些方法 就可以了
ButtonListener中调用按钮的事件监听方法,把配置文件以Text的形式读取出来
我们的邮件发送程序不仅仅是只能发送简单的文本邮件,还需要发送一些html的,.jar的 那么这些附件我们也要进行发送要怎么来实现呢?JavaMail中给我们提供了方法(这个程序中没有使用),我们使用的Apache下面的一个开源的项目,需要下载它下面的几个包
commons-email-1.0.zip,jaf-1_1-fr.zip。
程序思路:想到要用一个List来装入加入的附件类,把附件装入List的方法在sendTools类中已经实现 。这里 我们只需要用st去调用这个方法就可以
Java.util.List list=st.btnaddAccessoriesActionPerformed();//此时已经把加入的附件都装入了数组中,一个抽象的容器
Veoctor v=new Vector();//new 一个Vector对象,用来装入所有的文件,其作用类似于List 只不过 后者是异步的,至于为什么,线程中去找答案。
(到这里,既然附件已经都加入了数组,那么只需要遍历数组,就能够得到所有的附件,每一个附件都是一个文件,实际上,一次取出了
所有的文件,接下来用程序来实现遍历附件)
For(int i=0;i<list.size;i++)
{
String FileName=(String)List.get(i);//i是一个文件对象,需要强制转换成一个String才能够输出
v.add(FileName);
}
(到这里,我们已经加入了一个附件或者是说一系列附件,还要考虑到一个问题,新加的附件不能覆盖掉先前已经加入了的附件,那么,这个时候 还需要写一段代码 来实现从先前加入的附件后面再来添加新的附件,不至于覆盖掉前者,这是用到一个非常有用的ListModel)
ListModel API说明:此接口定义方法组件(如 JList),这些组件用于获取列表中每个单元格的值以及列表的长度。在逻辑上,模型是一个向量,索引范围从 0 到 ListDataModel.getSize() - 1。对数据模型的内容和长度的任何更改必须报告给所有 ListDataListener。
ListModel lm=accessorieslist.getModel(); //获取到列表中的值和长度了
For(int i=0;i<lm.getSize();i++)
{
v.add(lm.getElementAt(i));//得到附件的值和长度,加入到一个向量中去,脑袋抽象点。
}
Accessorieslist.setListData(v); //ListData的作用,每次在数据模型发生更改时都得到通知的列表,这里,列表为Accessorieslist。
程序中还有一个功能是能够抄送邮件,在界面的设计时,我把加入抄送文件的空间设置成了一个textfeild,但是,在抄送邮件的时候 我们必须以一个完整合格的邮件地址为单位来进行抄送,所以,在加入多个抄送地址的时候 我们必须要用一个方法来解析这个长的字符串
程序思路:参数String copy,String flagStr,是表示需要解析的字符串和解析的符号,我们可以实例化一个list对象,用来装载解析过了的字符串,解析过了的字符串是没一个完整的抄送地址。这个解析长字符需要用到java.util.StringTokenizer ,java.util,StringTokenizer(copy,“,”),意思是用“,”来分解字符串copy,while中把分解之后的单个抄送地址字符串添加到mackcopylist中,最后返回一个mackcopylist对象。
分享到:
相关推荐
使用 sendmail 脚本启动 Sendmail 服务器程序。 九、安装和配置 Dovecot 服务器 安装 Dovecot 服务器软件包,并在“/etc/dovecot.conf”文件中设置 Dovecot 服务器提供 POP3 服务。使用 dovecot 脚本启动 Dovecot ...
1. **sendmail** - 作为核心的邮件服务组件,`sendmail`是系统级的邮件服务器,处理邮件的接收、转发和发送任务。 2. **bugzilla** - `Bugzilla`是一个基于Web的开源错误追踪系统,用于软件开发项目管理,主要用于...
1. **sendmail-cf**:配置文件集 sendmail-cf-8.13.1-2.i386.rpm 包含了sendmail的配置文件和宏,这些文件用于定制sendmail的行为以适应特定的网络环境。配置文件通常包括`/etc/sendmail.cf`,它定义了邮件路由规则...
1. Sendmail邮件服务器:Sendmail是一款流行的开源邮件传输代理(MTA),它负责处理邮件的发送和接收。在Linux系统中,配置Sendmail通常包括修改配置文件如sendmail.mc和sendmail.cf来定义邮件传输规则。 2. ...
1. **DNS配置**:DNS(域名系统)是邮件传递的基础,它负责将域名转换为IP地址。在设置sendmail服务时,首先需要确保DNS服务器的正确运行。如描述中所示,这包括安装必要的软件包(如bind、bind-utils等),然后通过...
【sendmail服务器配置】是关于如何在Linux系统中设置和配置sendmail邮件服务器的过程,sendmail是一款广泛应用的开源邮件传输代理程序,以其稳定性、可移植性和无bug特性著称。理解电子邮件工作流程对于配置sendmail...
在Linux系统中,Sendmail是一款历史悠久且广泛应用的邮件传输代理(MTA)程序,它允许系统用户通过命令行发送电子邮件。Sendmail配置是一项关键任务,因为它涉及到系统的邮件服务功能,包括内部通信、系统通知以及与...
### Sendmail Lab – Part 1 #### 知识点概览 - **Sendmail 的起源与功能** - **Sendmail 的配置文件与管理** - **Sendmail 的版本信息查询** - **Sendmail 配置文件路径查找** - **Sendmail 配置文件中的别名处理*...
以普通用户身份登录,创建一个名为“mysmcfg.cf”的空文件,并使用sendmail程序指向此文件作为配置源,运行在规则测试模式下。初始时,由于文件为空,sendmail可能会报错,但记录这些错误信息对于后续的调试非常有...
1. **SendMail.exe.config**:这是应用程序的配置文件,它包含了程序运行时的设置,如数据库连接字符串、应用特定的配置选项以及可能的安全设置。用户可以通过编辑这个文件来调整SendMail客户端的行为,比如设置SMTP...
1. **Spring Sendmail**: Spring框架提供了`JavaMailSender`接口和`SimpleMailMessage`类来支持电子邮件的发送。`JavaMailSender`用于实际的邮件发送操作,而`SimpleMailMessage`则可以用来设置邮件的基本信息,如发...
- sendmail作为一个守护进程运行,监听指定的端口(通常为25)以接收来自其他SMTP服务器或本地应用程序的邮件。 - 配置文件通常位于`/etc/sendmail.cf`或`/etc/mail/sendmail.cf`,包含了邮件路由、认证和其他设置...
#### 核心知识点解析: 1. **传统SMTP协议的局限性与安全挑战** - 传统的SMTP(Simple Mail Transfer Protocol)缺乏用户身份验证功能,这使其易于被滥用为垃圾邮件的转发站,增加了系统管理和网络管理员追踪问题...
1.(sendmail 是最重要的邮件传输代理程序,可以支持数千甚至更多的用户); 2.(Sendmail 的配置文件可以根据需要进行自定义); 3.(Linux 下搭建邮件服务器可以使用 DNS 服务来解析域名); 4.(Linux 下搭建邮件服务器...
1. `/etc/mail/sendmail.cf`:主配置文件,由`sendmail.mc`模板文件生成。 2. `/etc/mail/sendmail.mc`:使用m4宏处理程序进行修改,以定制sendmail的行为。 3. `/etc/mail/access`:控制中继转发,指定哪些IP或域名...
- `sendmail-8.13.8-2.el5.i386.rpm`: 这是Sendmail服务的主要程序包,包含了运行服务器所需的核心组件。 - `sendmail-cf-8.13.8-2.el5.i386.rpm`: 宏文件包,提供了配置Sendmail所需的模板。 - `sendmail-devel-...
首先,我们需要安装Sendmail的相关软件包,包括sendmail-8.13.8-2.el5.i386.rpm(主程序包)、sendmail-cf-8.13.8-2.el5.i386.rpm(宏文件包)、sendmail-devel-8.13.8-2.el5.i386.rpm(开发工具包)和sendmail-doc-...
邮件服务程序配置,如sendmail的`/etc/mail/sendmail.cf`、`/etc/mail/sendmail.mc`,Postfix的`/etc/postfix/main.cf`,Exim的`/etc/exim/exim.cf`,以及Procmail的`/etc/procmail`相关文件,决定了邮件传递和处理...
1. **安装Sendmail服务**:安装所需的三个包:`sendmail-8.13.8-2.el5.i386.rpm`、`sendmail-cf-8.13.8-2.el5.i386.rpm`和`sendmail-doc-8.13.8-2.el5.i386.rpm`。 2. **配置Sendmail服务**:编辑`/etc/mail/...
【Linux sendmail配置】是关于在Linux操作系统中设置和配置Sendmail邮件传输代理程序的过程。Sendmail是一款广泛应用的邮件服务器软件,它负责处理和传递电子邮件。以下是对配置Sendmail的详细步骤的概述: 1. **MX...