日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java邮件服务器搭建_邮件服务器+javamail(仅包括发送)搭建

發布時間:2024/8/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java邮件服务器搭建_邮件服务器+javamail(仅包括发送)搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

最近寫一個管理系統需要用到發送郵件的功能,曾經在javamail中使用過163的smtp服務,但是郵件要么被當成垃圾郵件,要么就是無法在一天之內發送超過20封,四天前我再次使用javamail時,發現我的163賬號被凍結,允許我在廁所哭一會兒。然后換了qq的smtp服務,開啟服務還需收短信費用,以為花了錢可以弄好,結果又發現,javamail和騰訊的smtp握手失敗,已哭暈在廁所。最后忍無可忍只好自己搭一個郵件服務器。

牢騷發完了,開始進入主題,我使用的是centos6.5系統,以及和postfix郵件服務器,postfix郵件服務器的搭建需要使用到cyrus-sasl、postfix、dovecot,具體他們的功能我不在這里闡述,畢竟網上一大堆。

一、cyrus-sasl安裝與配置

yum -y install cyrus-sasl

與jdk安裝一樣最好查看他的版本,如果有版本提示則就證明安裝成功。

/usr/sbin/saslauthd -v

之后需要修改saslauthd文件,選擇使用shadow方式認證。(溫馨提示:可以在Linux中使用/word去查找單詞,如下面的MECH=shadow可以輸入/MECH=查找)

vim /etc/sysconfig/saslauthd

SOCKETDIR=/var/run/saslauthd

MECH=shadow

FLAGS=

修改smtpd.conf

vim /etc/sasl2/smtpd.conf

添加如下代碼

pwcheck_method: saslauthd

mech_list: plain login

log_level: 3

saslauthd_path:/var/run/saslauthd/mux

測試cyrus-sasl

創建系統用戶root,并修改其密碼,測試cyrus-sasl,如下:

useradd root &&echo 'rootmail'| passwd --stdin root

su - root

mkdir -p ~/mail/.imap/INBOX

啟動cyrus-sasl

/etc/init.d/saslauthd start

chkconfig saslauthd on

現在來使用剛剛創建的用戶進行認證測試,如下:

testsaslauthd -u root-p 'rootmail'

如果出現OK "Success"代表啟動成功,否則請嚴格檢查配置文件。

二、postfix安裝與基本配置

yum -y install postfix

查看他的版本與配置

postconf -d | grep mail_version

修改main.cf文件

vim /etc/postfix/main.cf

并添加如下代碼

queue_directory = /var/spool/postfix

command_directory = /usr/sbin

daemon_directory = /usr/libexec/postfix

data_directory = /var/lib/postfix

mail_owner = postfix

myhostname = mail.XXX.com(這里是寫你的服務器的域名前加上一個前綴,一般我們都喜歡用mail,域名必須可訪問)

mydomain = XXX.com(這里是寫你的服務器的域名,域名必須可訪問)

myorigin = $mydomain

inet_interfaces = all

mydestination = $myhostname, localhost.$mydomain, localhost

local_recipient_maps =

unknown_local_recipient_reject_code = 550

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

debug_peer_level = 2

debugger_command =

PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin

ddd $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail.postfix

newaliases_path = /usr/bin/newaliases.postfix

mailq_path = /usr/bin/mailq.postfix

setgid_group = postdrop

html_directory = no

manpage_directory = /usr/share/man

sample_directory = /usr/share/doc/postfix-2.6.6/samples

readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES

啟動postfix并設置開機自啟

/etc/init.d/postfix start

chkconfig postfix on

查看postfix的監聽端口,如果發現是25端口證明postfix已經成功啟動

netstat -tunlp

ps -ef |grep postfix

我們來測試postfix是否可以發郵件

telnet mail.XXX.com 25

mail from:root@XXXX.com

rcpt to:xxxx@qq.com

data

XXXXXXXX

quit

登錄郵箱發現確實有一封郵件。

這個時候,我們來試試javamail。

import?java.util.List;

import?java.util.Properties;

import?javax.activation.DataHandler;

import?javax.activation.FileDataSource;

import?javax.mail.Address;

import?javax.mail.BodyPart;

import?javax.mail.Message;

import?javax.mail.Multipart;

import?javax.mail.Session;

import?javax.mail.Transport;

import?javax.mail.internet.InternetAddress;

import?javax.mail.internet.MimeBodyPart;

import?javax.mail.internet.MimeMessage;

import?javax.mail.internet.MimeMultipart;

import?javax.mail.internet.MimeUtility;

public?class?MailUtils?{

/**

*?向用戶發送郵件

*/

private?static?final?long?serialVersionUID?=?1L;

private?MimeMessage?mimeMsg;?//?MIME郵件對象

private?Session?session;?//?郵件會話對象

private?Properties?props;?//?系統屬性

private?boolean?needAuth?=?false;?//?smtp是否需要認證

private?String?username;?//?smtp認證用戶名和密碼

private?String?password;

private?Multipart?mp;?//?Multipart對象,郵件內容,標題,附件等內容均添加到其中后再生成

private?String?log;

public?MailUtils()?{

}

public?MailUtils(String?smtp)?{

setSmtpHost(smtp);

createMimeMessage();

}

public?void?setSmtpHost(String?hostName)?{

System.out.println("設置系統屬性:mail.smtp.host?=?"?+?hostName);

if?(props?==?null)

props?=?System.getProperties();?//?獲得系統屬性對象

props.put("mail.smtp.host",?hostName);?//?設置SMTP主機

props.put("mail.smtp.localhost",?"localHostAdress");

}

public?boolean?createMimeMessage()?{

try?{

System.out.println("準備獲取郵件會話對象!");

session?=?Session.getDefaultInstance(props,?null);?//?獲得郵件會話對象

}?catch?(Exception?e)?{

log?=?"獲取郵件會話對象時發生錯誤!"?+?e.toString();

System.err.println(log);

return?false;

}

try?{

mimeMsg?=?new?MimeMessage(session);?//?創建MIME郵件對象

mp?=?new?MimeMultipart();?//?mp?一個multipart對象

//?Multipart?is?a?container?that?holds?multiple?body?parts.

return?true;

}?catch?(Exception?e)?{

log?=?"創建MIME郵件對象失敗!"?+?e;

System.err.println(log);

return?false;

}

}

public?void?setNeedAuth(boolean?need)?{

System.out.println("設置smtp身份認證:mail.smtp.auth?=?"?+?need);

if?(props?==?null)

props?=?System.getProperties();

if?(need)?{

props.put("mail.smtp.auth",?"true");

}?else?{

props.put("mail.smtp.auth",?"false");

}

}

public?void?setNamePass(String?name,?String?pass)?{

System.out.println("程序得到用戶名與密碼");

username?=?name;

password?=?pass;

}

public?boolean?setSubject(String?mailSubject)?{

System.out.println("設置郵件主題!");

try?{

mimeMsg.setSubject(MimeUtility.encodeText(mailSubject,"utf-8","B"));

return?true;

}?catch?(Exception?e)?{

log?=?"設置郵件主題發生錯誤!"+e;

System.err.println(log);

return?false;

}

}

public?boolean?setBody(String?mailBody)?{

try?{

System.out.println("設置郵件體格式");

BodyPart?bp?=?new?MimeBodyPart();

//?轉換成中文格式

bp.setContent(

""

+?mailBody,?"text/html;charset=utf-8");

mp.addBodyPart(bp);

return?true;

}?catch?(Exception?e)?{

log?=?"設置郵件正文時發生錯誤!"?+?e;

System.err.println(log);

return?false;

}

}

public?boolean?setFiles(List?files){

try{

for(String?s:files){

MimeBodyPart?mbp=new?MimeBodyPart();

FileDataSource?fds=new?FileDataSource(s);?//得到數據源

mbp.setDataHandler(new?DataHandler(fds));?//得到附件本身并至入BodyPart

mbp.setFileName(fds.getName());??//得到文件名同樣至入BodyPart

mp.addBodyPart(mbp);

}

return?true;

}catch(Exception?e){

log?=?"增加附件時出錯:"+e;

e.printStackTrace();

return?false;

}

}

public?boolean?addFile(String?path,?String?name){

try{

MimeBodyPart?mbp=new?MimeBodyPart();

FileDataSource?fds=new?FileDataSource(path);?//得到數據源

mbp.setDataHandler(new?DataHandler(fds));?//得到附件本身并至入BodyPart

mbp.setFileName(MimeUtility.encodeText(name,"utf-8","B"));

mp.addBodyPart(mbp);

return?true;

}catch(Exception?e){

log?=?"增加附件時出錯:"+e;

e.printStackTrace();

return?false;

}

}

public?boolean?setFrom(String?from)?{

System.out.println("設置發信人!");

try?{

mimeMsg.setFrom(new?InternetAddress(from));?//?設置發信人

return?true;

}?catch?(Exception?e)?{

log?=?"設置發信人出錯:"+e;

return?false;

}

}

public?boolean?setTo(String?to)?{

System.out.println("設置收信人");

if?(to?==?null)

return?false;

try?{

mimeMsg.setRecipients(Message.RecipientType.TO,?InternetAddress

.parse(to));

return?true;

}?catch?(Exception?e)?{

return?false;

}

}

public?boolean?setCopyTo(String?copyto)?{

if?(copyto?==?null)

return?false;

try?{

mimeMsg.setRecipients(Message.RecipientType.CC,

(Address[])?InternetAddress.parse(copyto));

return?true;

}?catch?(Exception?e)?{

return?false;

}

}

public?boolean?sendout()?{

try?{

mimeMsg.setContent(mp);

mimeMsg.saveChanges();

System.out.println("正在發送郵件....");

Session?mailSession?=?Session.getInstance(props,?null);

Transport?transport?=?mailSession.getTransport("smtp");

transport.connect((String)?props.get("mail.smtp.host"),?username,

password);

transport.sendMessage(mimeMsg,?mimeMsg.getRecipients(Message.RecipientType.TO));

System.out.println("發送郵件成功!");

transport.close();

return?true;

}?catch?(Exception?e)?{

log?=?"郵件發送失敗!"?+?e;

System.err.println(log);

return?false;

}

}

public?String?getLog(){

return?log;

}

public?static?void?main(String[]?args)?{

MailUtils?utils?=?new?MailUtils("mail.xxx.com");

utils.setFrom("root@xxx");

utils.setSubject("xxxx");

utils.setNamePass("xxx","xxx");

utils.setBody("main");

utils.setTo("xxxx@qq.com");

utils.sendout();

}

}

運行成功!

尾聲

到此結束,但是在這里我并沒有配置反垃圾策略,有需要的同學可以百度下,并且在這里,如果我發送大量的郵件的話,還是無法避免封ip,這也是為什么要購買郵件服務器的原因吧。

總結

以上是生活随笔為你收集整理的java邮件服务器搭建_邮件服务器+javamail(仅包括发送)搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。