導航:首頁 > 源碼編譯 > 郵箱伺服器源碼

郵箱伺服器源碼

發布時間:2025-02-25 04:13:30

『壹』 linux系統下郵件伺服器sendmail的配置

安裝所需軟體

sendmail.8.12.10.tar.gz   http://www.sendmail.org/

cyrus-sasl-2.1.18.tar.gz  http://asg.web.cmu.e/cyrus/

安裝步驟

1、        先安裝cyrus-sasl-2.1.18.tar.gz,sendmail安裝時要用到sasl(簡單認證和安全層協議)的庫文檔的頭文檔。

壓縮

# tar -zxvf cyrus-sasl-2.1.18.tar.gz

編譯:

進入剛解壓源碼目錄,運行以下命令完成安裝。

#./configure --prefix=/usr/local/sasl2 --enable-login

一定要加--enable-login,因為SASL2默認不支持login這種驗證方式,而OUTLOOK是通過

login來進行SMTP驗證的。

#make           # 編譯

#make install        # 安裝

完成以上linux程式安裝三步曲之後,就能夠開始配置和測試了。

2、配置SASL

為了把SASL應用於sendmail認證,還需進行一些配置工作。sendmail會到/usr/lib目錄下去

找SASL2庫,而我們是把程式安裝在/usr/local/sasl2中,為什麼不把軟體安裝在/usr/lib目錄

呢?這主要是為了好管理自已安裝的軟體啦。所以我們要在/usr/lib目錄下做一個鏈接:

# cd /usr/lib

# ln -s /usr/local/sasl2/lib/* .

ok,接著要在/var/目錄下建一個目錄給saslauthd進程存在臨時數據。

# cd /var

# mkdir state

# cd state

# mkdir saslauthd

註:假如沒有這些目錄,運行saslauthd時,會提示出錯。

ok,接著為確保CYRUS-SASL2函數庫知道怎樣驗證所收來的SASL認證請求,必須創建一

個SASL的配置文檔來把MTA程式定義成一個SASL應用。配置文檔名為Sendmail.conf(注

意是大寫的S),位於/usr/lib/sasl2目錄中,也就是/usr/local/sasl2/lib/sasl2這個目錄,記得上

面新建的鏈接了嗎?在該文檔中您定義您希望使用的認證資料庫方法,以下這個例子使用

saslauthd來驗證認證請求。

# cd /usr/lib/sasl2

# echo 'pwcheck_method: saslauthd' ; Sendmail.conf

3、測試

ok,現在能夠運行saslauthd了,並進行測試。

# cd /usr/local/sasl2/sbin

# ./saslauthd -a shadow               

用shadow的用戶和密碼進行驗證

# ./testsaslauthd -u userid -p password

0: OK "Success."

假如出現以上信息,就說明saslauthd正常運行了。testsaslauthd程式默認是沒有編譯的,您

需要在源碼目錄樹的saslauthd子目錄中運行     # make testsaslauthd命令生成。

4、sasl2安裝完成後,就要開始安裝sendmail了。

先解壓sendmail源碼。

# tar -zxvf sendmail.8.12.10.tar.gz

假如要sendmail支持SASL,需要修改源碼的位置配置文檔site.config.m4。site.config.m4位

於源碼目錄樹的devtools/Site。文檔中應包含以下行:

PREPENDDEF(`confMAPDEF', `-DMAP_REGEX')

APPENDDEF(`confENVDEF', `-DTCPWRAPPERS -DSASL=2')

APPENDDEF(`conf_sendmail_LIBS', `-lwrap -lsasl2')

APPENDDEF(`confLIBDIRS', `-L/usr/local/sasl2/lib')

APPENDDEF(`confINCDIRS', `-I/usr/local/sasl2/include')

第一行配置正則表達式相關內容

第二、三行配置表示在sendmail程式中支持sasl2和tcp_wrapper(可通過hosts.allow和

hosts.deny控制訪問)

第四、五行配置指出sasl2的庫文檔和頭文檔的位置。

ok,接著在編譯前要建立一些用戶和目錄,並確保有正確的許可權。

sendmail必須有一個set-group-id(默認是smmsp組)的程式來在一個組可寫的目錄中查詢

排隊郵件。所以我們要建立一個smmsp用戶和組。並建立如下目錄並配置相應的許可權,具

體配置需要可查詢源碼目錄樹下sendmail/SECURITY文檔。

# groupadd smmsp

# useradd smmsp -d /var/spool/clientmqueue -s /dev/null

# mkdir /var/spool/clientmqueue

# chown -R smmsp:smmsp /var/spool/clientmqueue  

# chmod -R 770 /var/spool/clientmqueue  

# mkdir /etc/mail

# mkdir /var/spool/mqueue

# chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue

# chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue

ok,接下來就能夠進入源碼目錄樹開始編譯了。

# ./Build -c

-c選項能刪除上次編譯產生的文檔。

# ./Build install

編譯完成後就能夠進行安裝。

5、sendmail配置

sendmail正常運行,還需配置幾個文檔,首先最重要的就是sendmail.cf 文檔了。他在源

碼目錄樹下的cf/cf目錄下有很多例子可參考。您能夠拷貝使用。由於sendmail.cf中的語法

很復雜,所以不建議手工修改。我們能夠以sendmail.mc文檔配合sendmail-cf目錄下的宏通

過m4預處理器自動生成。m4預處理器用來從一組宏文檔中創建sendmail配置文檔。宏文

件作為輸入被讀進來。宏被展開,然後寫到一個輸出文檔。sendmail-cf目錄一般放在/usr/share

目錄下。其實sendmail-cf目錄的內容和源碼目錄樹下的cf目錄的內容是相同的,所以,為

了確保sendmail-cf目錄的內容和安裝版本同步,要把源碼目錄樹下的cf目錄的內容拷貝到

/usr/share/sendmail-cf目錄。

sendmail.mc配置文檔內容如下:

divert(-1)

include(`/usr/share/sendmail-cf/m4/cf.m4')

VERSIONID(`linux setup for Red Hat Linux')dnl

OSTYPE(`linux')

dnl Uncomment and edit the following line if your mail needs to be sent out

dnl through an external mail server:

dnl define(`SMART_HOST',`smtp.your.provider')

define(`confDEF_USER_ID',``8:12'')dnl

undefine(`UUCP_RELAY')dnl

undefine(`BITNET_RELAY')dnl

dnl define(`confAUTO_REBUILD')dnl

define(`confTO_CONNECT', `1m')dnl

define(`confTRY_NULL_MX_LIST',true)dnl

define(`confDONT_PROBE_INTERFACES',true)dnl

define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl

define(`ALIAS_FILE', `/etc/mail/aliases')dnl

define(`STATUS_FILE', `/etc/mail/statistics')dnl

define(`UUCP_MAILER_MAX', `2000000')dnl

define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl

define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl

define(`confAUTH_OPTIONS', `A')dnl

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl               

define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5

LOGIN PLAIN')dnl

dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')

dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')

dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')

dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')

dnl define(`confTO_QUEUEWARN', `4h')dnl

dnl define(`confTO_QUEUERETURN', `5d')dnl

dnl define(`confQUEUE_LA', `12')dnl

dnl define(`confREFUSE_LA', `18')dnl

define(`confTO_IDENT', `0')dnl

dnl FEATURE(delay_checks)dnl

FEATURE(`no_default_msa',`dnl')dnl

FEATURE(`smrsh',`/usr/sbin/smrsh')dnl

FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl

FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl

FEATURE(redirect)dnl

FEATURE(always_add_domain)dnl

FEATURE(use_cw_file)dnl

FEATURE(use_ct_file)dnl

dnl The '-t' option will retry delivery if e.g. the user runs over his quota.

FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl

FEATURE(`access_db',`hash -T; -o /etc/mail/access.db')dnl

FEATURE(`blacklist_recipients')dnl

EXPOSED_USER(`root')dnl

dnl This changes sendmail to only listen on the loopback device 127.0.0.1

dnl and not on any other network devices. Comment this out if you want

dnl to accept email over the network.

DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')

dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires

dnl       a kernel patch

dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')

dnl We strongly recommend to comment this one out if you want to protect

dnl yourself from spam. However, the laptop and users on computers that do

dnl not have 24x7 DNS do need this.

FEATURE(`accept_unresolvable_domains')dnl

dnl FEATURE(`relay_based_on_MX')dnl

MAILER(smtp)dnl

MAILER(procmail)dnl

記得要使以下兩個條語句有效,他的意思是假如access.db訪問控制沒有配置,則啟用以下

驗證方式進行smtp驗證。

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl               

define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5

LOGIN PLAIN')dnl

sendmail宏定義說明

divert(n)                為m4定義一個緩沖動作,當n=-1時緩沖被刪除,n=0時開始一個新緩沖

OSTYPE定義宏所使用的操作系統,該宏允許m4程式增加同相關操作系統相關的

文檔

Domain定義MTA將使用哪些域來傳輸郵件

Feature定義配置文檔中使用的一個特定的功能集

Define定義配置文檔中的一個特定的選項值

MASQUERADE_AS                定義sendmail來應答郵件的其他主機名

MAILER定義sendmail使用的郵件傳輸方法

dnl注釋

完成sendmail.mc文檔的編寫後就能夠用m4程式生成正式的sendmail.cf配置文檔。語法如

下:

# m4 sendmail.mc ; sendmail.cf

也能夠用源碼目錄樹下的cf/cf/Build命令生成。前提是您要在該目錄下有一個sendmail.mc

文檔。語法如下:

# ./Build sendmail.cf

ok,接著就能夠把sendmail.cf and submit.cf文檔安裝到/etc/mail目錄中的,語法如下:

# ./Build install-cf

其實也能夠自已用cp命令拷貝的啦。記得把sendmail.mc文檔也拷貝一份到/etc/mail目錄,

以便以後修改配置時可重新生成sendmail.cf文檔。

ok,接著到/etc/mail目錄下配置一些文檔。

# cd /etc/mail

# echo 'examply.com' ;; local-host-names         接收郵件的主機名

# echo 'localhost    RELAY'  ;; access                 用來拒絕或允許來自某個域的郵件,本例允許

本地轉發。

# makemap hash access 生成access.db資料庫

# touch domaintable         用來把舊域名映射互新域名

# makemap hash domaintable 來覆蓋向指定域的路由

# makemap hash mailertable 用來把用戶和域名映射到其他地址

# makemap hash virtusertable 別名資料庫,文本形式。可參照源碼目錄樹下

sendmail/aliases文檔。

# newaliases                  從文本文檔中創建一個新的別名資料庫文檔。

# sendmail -v -bi        調試啟動。

/etc/mail/aliases: 42 aliases, longest 10 bytes, 432 bytes total

假如出現以上提示信息,則啟動成功。可用以下命令正式啟動:

# sendmail -bd -q30m

該命令以後台進程方式(-bd)運行,並使其每隔30分鍾(-q30m)輪詢一次未發送郵件隊

列,檢查是否有新郵件。

伺服器啟動後,能夠用telnet連接伺服器。

# telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

220 test.tigerhead ESMTP Sendmail 8.12.10/8.12.10; Tue, 30 Mar 2004 14:50:14 +0800

ehlo test                您輸入的命令,按回車結束。

250-test.tigerhead Hello LOCALHOST.localdomain [127.0.0.1], pleased to meet you

250-ENHANCEDSTATUSCODES

250-PIPELINING

250-8BITMIME

250-SIZE

250-DSN

250-ETRN

250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN

250-DELIVERBY

250 HELP

以250-開頭的為伺服器的響應信息。注意倒數第三行,這就是成功配置smtp驗證的顯示。

輸入quit離開。

安裝完成後為確保系統安全,還需調整一些目錄的許可權。可參考sendmail源碼目錄下

sendmail/SECURITY文檔。

# chmod 0640 /etc/mail/aliases /etc/mail/aliases.{db,pag,dir}

# chmod 0640 /etc/mail/*.{db,pag,dir}

# chmod 0640 /etc/mail/statistics /var/log/sendmail.st

# chmod 0600 /var/run/sendmail.pid /etc/mail/sendmail.pid

-r-xr-sr-x        root   smmsp        ... /PATH/TO/sendmail

drwxrwx---        smmsp  smmsp        ... /var/spool/clientmqueue

drwx------        root   wheel        ... /var/spool/mqueue

-r--r--r--        root   wheel        ... /etc/mail/sendmail.cf

-r--r--r--        root   wheel        ... /etc/mail/submit.cf

6、sendmail功能介紹

aliases 別名資料庫配置

test:        test1,test2,test3        配置test群組別名,test不是個實際的用戶,只是個別名。發給

test的信,test1,2,3都可收到。

test:        test,testbak                在testbak郵箱中備份test的郵件。

test:        test,[email protected]        遠程郵件備份,原理同上。

test:   :include: /etc/mail/userlist        使用用戶列表配置群組。

userlist格式如下:

test1, /

test2, /

test3, /

test4

關於系統預設aliases,由於sendmail預設用mailer-daemon and postmaster作為資料傳送者,

或郵件退回的帳號,但系統實際沒有這兩個帳號,所以要如下配置別名。

mailer-daemon:  postmaster

postmaster:     root

配置完成後不要忘了用newaliases命令生成資料庫。

~/.forward文檔配置

其實該文檔的作用和aliases資料庫的作差不多啦,都是配置別名,做郵件轉發的。因為alises

只能由管理員控制,個人用戶不能修改,所以就能夠在個人的目錄下建立一個轉寄文檔。以

配置個人的郵件轉寄列表。文檔格式如下:

test

test1

test2

test3

and os on

但由於個人用戶安全意識差,假如配置不當會有安全漏洞,不建議使用。

access訪問控制列表配置

92.168 RELAY

test.NET        OK

test.COM REJECT

test.COM        550 SORRY,WE DON'T ALLOW SPAMMERS HERE

test.ORG        DISCARD

Ok--遠程主機能夠向您的郵件伺服器發送郵件;

RELAY--允許中轉;

REJECT--不能向您的郵件伺服器發郵件和不能中轉;

DISCARD--發來的郵件將被丟棄,同時並不向發送者返回錯誤信息。

nnn text-- 發來的郵件將被丟棄,但sendmail將會向發送者返回nnn確定的smtp代碼和text

變數確定的文本描述。

配置完成後要用makemap hash access.db 命令生成資料庫。

mailq郵件隊列查詢命令。

Q-ID郵件id號。

Size郵件容量。

Q-Time郵件進入隊列(也就是/var/spool/mqueue目錄)的時間和不能郵寄的原因。

Sender/Recipient        發信和收信人的郵箱地址。

mailstats郵寄狀態查詢命令,可查詢sendmail運行作至今郵件收發總計資料。

M     :

msgsfr:發送的郵件數量。

bytes_from:郵件容量

megsto:收到郵件的數量。

bytes_to:同上

msgsrej:郵件deny的次數。

msgsdis:郵件discard的次數。

Mailer :esmtp對外郵件 ,local本地郵件 。

mail郵件命令

mail        查看/var/spool/mail/目錄下自已郵箱內容。以q退出把看過的郵件保存在

~/mbox中。

mail [email protected]                直接發郵件給人。

mail -s 'title text' [email protected] 把文檔中內容郵寄出去。

mail -f ~/mbox查看home目錄下郵箱內容。

用mail發附件也是可行,要用到uuencode and uudecode命令進行編碼。

編碼:uuencode [file] name          example:uuencode hello hello;hello.uue   default input

is stdin;default output is stdout.

解碼:uudecode [-o outfile] name    example:uudecode hello.uue 能夠用-o選項輸出另外一個

文檔名。

# uuencode ~/.bashrc bashrc | mail -s 'test uuencode'

[email protected]

五、其他配置。

要想更好的使用sendmail,常用到的一些配置:

1、限制最大郵件。

vi /etc/sendmail.cf

# maximum message size

O MaxMessageSize=5000000    (註:5M)

2、最大的群發數目。

vi /etc/sendmail.cf

# maximum number of recipients per SMTP envelope

O MaxRecipientsPerMessage=20  (註:20個)

3、域名文檔----local-host-name

能夠用他來實現虛擬域名或多域名支持。

/etc/mail/local-host-name

v1mail.com

v2mail.com

.......

4、mail別名文檔--aliases。

vi /etc/aliases

系統內部別名:peng:zpeng,hero,mmmn,yt   peng是我的用戶名,其他的是別名,用逗號隔開。

轉發到其他的郵箱:peng:[email protected],yt.sohu.com

#newaliases   --寫到庫中

5、郵件控制文檔--access

relay、ok、reject和discard。relay能夠實現轉發。ok是用來允許用戶的任意訪問,他會覆蓋任何其他已建立的檢查(實際配置中,最好別設這項,除非您對該用戶是絕對信任的);reject能夠實現對來訪地址的拒絕,他根本就不容許該地址和您的郵件伺服器進行連接通信;discard的作用是在接收到傳輸的郵件消息後,偷偷地把他丟棄掉(在發送者看來,他的郵件的確是接收了,但他並不知道,發送的目的地址根本不可能接收到他的郵件,伺服器巧妙地欺騙了他。

vi /etc/mail/access.

localhost.localdomain    RELAY      ---允許

localhostRELAY

127.0.0.1                       RELAY

[email protected]              ok

@sexgirl.net                   reject

211.77.22.45                  discard

#makemap hash access.db 寫入庫中

6、虛擬用戶文檔---virtusertable.

這個文檔能夠mail重名問題。

例如:您有兩個域名,virt1.com and virt2.com,但是都有peng這個用戶:

[email protected] and [email protected],這是兩個用戶。但對於系統用戶來說,他只認系統用戶peng,只能通過一下改:

vi /etc/mail/virtusertable

[email protected]   r010

這樣就能夠了。在新開一個用戶r010,但是[email protected]在客戶端的pop3 and smtp server的用戶名和口令要用r010的。

#makemap hask virtusertable.db

# /usr/sbin/sendmail -d0.1 -bv root |grep SASL

NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS QUEUE SASL SCANF

我的問題已找到了是/usr/lib/sasl/Sendmail.conf的文檔名中的S沒有大寫,問題已解決

『貳』 python怎麼安裝sendmail

python發送郵件的介紹比較多,都是需要登錄某個郵件服務商,有密碼修改和頻繁發送被限制的問題。這里介紹一下,調用本機linux自身sendmail服務發送郵件。不需要登錄,發送郵件名可以是任意名字,沒有限制。
1. 安裝:
#yum install -y sendmail
2. 啟動服務:
#service sendmail start
檢查服務是否加入自啟行列
#chkconfig --list |grep sendmail
3 python代碼:

from email.mime.text import MIMEText
from subprocess import Popen, PIPE
import commands
def send_mail(sender, recevier, subject, html_content):
msg = MIMEText(html_content, 'html', 'utf-8')
msg["From"] = sender
msg["To"] = recevier
msg["Subject"] = subject
p = Popen(["/usr/sbin/sendmail", "-t"], stdin=PIPE)
p.communicate(msg.as_string())
send_mail("[email protected]","[email protected],[email protected]","title", 「mail_text」)
[email protected]可以是任意郵箱名
[email protected]是收郵件的郵箱
title是郵件標題
mail_text是郵件內容
可以結合其他介紹python發郵件的資料,發出更復雜的郵件

閱讀全文

與郵箱伺服器源碼相關的資料

熱點內容
可以復制加密門禁的軟體 瀏覽:41
電腦文件夾是默認共享的嗎 瀏覽:756
網頁pdf怎麼轉word 瀏覽:66
如何使用cs伺服器中文id 瀏覽:100
珠海稅務局伺服器地址和埠號 瀏覽:887
加密狗型號有什麼用 瀏覽:381
阿里雲怎麼開啟伺服器埠 瀏覽:87
ftp伺服器如何判斷已經傳送了 瀏覽:791
程序員折999朵玫瑰花 瀏覽:213
加密文件是不是不可以解壓 瀏覽:386
android編譯命令 瀏覽:489
失落世界伺服器怎麼上船 瀏覽:845
華為ecs雲伺服器價格 瀏覽:676
百合小說壓縮包 瀏覽:591
scratch怎麼編程 瀏覽:594
手機美圖秀秀圖片壓縮 瀏覽:194
userid加密字元串設置 瀏覽:695
如何解析寶塔伺服器域名 瀏覽:645
android日誌串口 瀏覽:329
app和app如何轉化 瀏覽:729