導航:首頁 > 編程系統 > linuxsendmail隊列

linuxsendmail隊列

發布時間:2023-09-04 18:53:19

『壹』 linux下的sendmail如何配置

sendmail的功能強大,配置起來也十分繁瑣。本例僅介紹如何架設小型的區域網電子郵局。
1、設置sendmail 作為守衛進程(daemon)啟動
可以使用以下命令來確認 sendmail 是否已經啟動:ps –A|grep sendmail
如果啟動了 sendmail,那麼這個命令將顯示出它的相關信息。如果沒有啟動,則需要在/etc/rc.d/rc.net 文件中加上如幾行代碼
if [-f /usr/lib/sendmail ];
then(cd /usr/spool/mqueue;rm –f if *)
/usr/lib/sendmail-bd-qlh;echo –n 『sendmail』>/dev/console
fi
2、設置sendmail.cf
sendmail.cf是sendmail的配置文件。在安裝了 Linux 系統之後,它將自動生成一個適合本系統使用的 sendmail.cf 文件,位於/etc/sendmail.cf
3、開啟SMTP、POP 埠
在默認情況下,SMTP 埠是打開的,而 POP埠是關閉的,我們必須將它打開:
1)用 root(超級許可權)登錄到伺服器上;
2)編輯文件/etc/inetd.conf;
3)找到描述 POP 埠的語句:#pop3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop3d
4)將 POP3的描述語句那一行的注釋號「#」去掉。
5)如果沒有找到,就手工補上這一行;(另外,我們還可以驗證一下是否存在 SMTP埠的描述語句) ;
6)存檔後退出。
7)運行 inetd 命令,使得設置生效。
8)用以下命令驗證,看 POP3 埠是否打開(生效):netstat –a |grep pop
如果打開的話,可以看到以下信息:tcp 0 0 *:pop3 *:* LISTEN
4、為新用戶開E-Mail 帳號
在 Linux 中開設 E-Mail 帳號十分簡單,只要在 Linux 系統中新增一個用戶即可。該用戶帳號和密碼就是E-Mail 的帳號和密碼。如:為新用戶 guest 開一個E-Mail帳號,用以下命令即可:
adser guest passwd guest
這樣,該新用戶的 E-Mail 地址就是:[email protected] ;密碼為:guest
5、為E-Mail 帳號設置別名
如果某個用戶想使用多個 E-Mail 地址,可通過設置別名的方法來實現。比:用戶「杜
方冬」想同時擁有 E-Mail 地址:[email protected] ;[email protected] ;[email protected]
就可通過以下步驟來實現這樣的別名設置:
1)以 root 登錄伺服器;
2)新增一個賬號 dfd;
3)編輯文件/etc/aliases,加上兩行:
fd:dfd
fd2000:dfd
4)存檔退出;
5)執行命令: newaliases
這樣,用戶杜方冬就擁有三個郵件地址,杜方冬只需使用一個E-Mail 帳號:[email protected]就可以接收所有寄給以上三個E-Mail 郵件地址的電子郵件。
6、郵箱空間的限定
如果你想控制用戶郵箱空間的大小,可以對它進行限定。實現方法是利用磁碟限額功能來實現的。電子郵件的暫存空間是在/var/spool/mail 目錄下,只要通過磁碟限額設定每一個用戶在這個目錄下能使用的最大空間就可以了。

『貳』 linux下如何發送mail,難道一定要開smtp服務嗎

是的

Linux下的SMTP服務的配置,比較復雜一些,且各發行版本有些差異,以下是一個示例,供參考(建議使用第三個方法)

linux下smtp配置方法有幾種,具體如下:
方法一,使用mail函數發送郵件;使用時時需要在本地系統上正確設置SMTP,否則將不能發送郵件。由於對系統的依賴性比較大,很多時候很不穩定,在一些提供虛擬主機服務的代理商中使用mail函數發送郵件往往很不好用,所以不推薦使用這種方法。
方法二,使用管道的形式發送郵件,主要是使用php中的popen函數。使用管道的方法發送郵件屬於比較底層的操作,它取決於用戶調用程序的穩定性。所以相比mail函數,這是一種可選的發送郵件的方式,但是這些本地的郵件系統都太復雜了,用戶可能不會配置。
方法三(推薦),使用phpmailer。phpmailer類是一個開源的發送郵件類,可以從http://phpmailer.sourceforge.net官網下載,它含兩個文件class.smtp.php和class.phpmailer.php。代碼如下

include_once("class.phpmailer.php");
/**
* 定義郵件模塊配製信息
*/
define("SMTP_HOST","smtp.mail.yahoo.com"); // SMTP 主機
define("SMTP_MAIL"," [email protected]"); // SMTP 用戶email
define("SMTP_PASS"," XXXX"); // SMTP 用的密碼

define("SERVICE_MAIL"," [email protected]"); // SMTP 用戶email
define("SERVICE_NAME","PHPBOOK郵件測試"); // SMTP 用的名字

/**
* 使用phpmailer發郵件模塊
*
* @param string $email
* @param string $user
* @param string $subject
* @param string $body
* @return bool
*/
function sendMail($email,$user,$subject,$body)
{
$mail = new PHPMailer();
//$this;
$mail->IsSMTP(); // 設置使用SMTP
$mail->Host = SMTP_HOST; // 設置SMTP伺服器地址
$mail->SMTPAuth = true; // 打開SMTP許可權驗證
$mail->Username = SMTP_MAIL; // SMTP 用戶名
$mail->Password = SMTP_PASS; // SMTP 伺服器密碼

$mail->From = SERVICE_MAIL; // 設置發送者地址
$mail->FromName = SERVICE_NAME; // 設置發送者名字
$mail->AddAddress($email, $user); // 添加接收者地址
$mail->AddReplyTo(SERVICE_MAIL, SERVICE_NAME); // 設置回復地址

$mail->WordWrap = 50; // 設置顯示格式
$mail->IsHTML(true); // 設置郵件支持html
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AltBody = ""; // 文本類型的郵件

if(!$mail->Send())
{
return $mail->ErrorInfo;
}
return true;
}

//開始發送測試郵件ng: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/xiehui/admin/mail/class.smtp.php on line 89
$tomail = " [email protected]";
$user = " XXXXlinux";
$_mailSubject = "郵件測試示例!"; // 發給用戶的郵件標題小組
$_mailBody = "新浪網"; // 郵件內容小組
sendMail($tomail,$user,$_mailSubject,$_mailBody);
?>

實驗證明yahoo的smtp很好用,號稱sina的其實並不好用,我卡在著好長時間。

方法四,給予socket編寫的程序,源代碼如下

使用socket發送郵件的封裝類:
class sendmail{
var $lastmessage; //記錄最後返回的響應信息
var $lastact; //最後的動作,字元串形式
var $welcome; //用在HELO後面,歡迎用戶
var $debug; //是否顯示調試信息
var $smtp; //smtp伺服器
var $port; //smtp埠號
var $fp; //socket句柄
//發送郵件函數
function send_mail($smtp, $welcome="", $debug=false) {
if(empty($smtp)) die("SMTP不能為空!");
$this->smtp=$smtp;
if(empty($welcome)) {
$this->welcome=gethostbyaddr("localhost");
}else
$this->welcome=$welcome;
$this->debug=$debug;
$this->lastmessage="";
$this->lastact="";
$this->port="25";
}
//顯示調試信息
function show_debug($message, $inout) {
if ($this->debug) {
if($inout=="in"){ //響應信息
$m='<< ';
}else
$m='>> ';
if(!ereg("\n$", $message))
$message .= "
";
$message=nl2br($message);
echo "${m}${message}";
}
}
//執行傳遞的命令
function do_command($command, $code) {
$this->lastact=$command;
$this->show_debug($this->lastact, "out");
fputs ( $this->fp, $this->lastact );
$this->lastmessage = fgets ( $this->fp, 512 );
$this->show_debug($this->lastmessage, "in");
if(!ereg("^$code", $this->lastmessage))
return false;
else
return true;
}
//郵件發送處理
function send( $to,$from,$subject,$message) {
//連接伺服器
$this->lastact="connect";
$this->show_debug("連接到SMTP 伺服器: ".$this->smtp, "out");
$this->fp = fsockopen ( $this->smtp, $this->port );
if ( $this->fp ) {
$this->set_socket_blocking( $this->fp, true );
$this->lastmessage=fgets($this->fp,512);
$this->show_debug($this->lastmessage, "in");
if (! ereg ( "^220", $this->lastmessage ) ) {
return false;
}else{
$this->lastact="HELO " . $this->welcome . "\n";
if(!$this->do_command($this->lastact, "250")){
fclose($this->fp);
return false;
}
$this->lastact="MAIL FROM: $from" . "\n";
if(!$this->do_command($this->lastact, "250")){
fclose($this->fp);
return false;
}
$this->lastact="RCPT TO: $to" . "\n";
if(!$this->do_command($this->lastact, "250")){
fclose($this->fp);
return false;
}
//開始發送郵件正文
$this->lastact="DATA\n";
if(!$this->do_command($this->lastact, "354")){
fclose($this->fp);
return false;
}
//開始處理郵件主題頭
$head="Subject: $subject\n";
if(!empty($subject) && !ereg($head, $message)){
$message = $head.$message;
}
//開始處理郵件From頭
$head="From: $from\n";
if(!empty($from) && !ereg($head, $message)) {
$message = $head.$message;
}
//開始處理郵件To頭
$head="To: $to\n";
if(!empty($to) && !ereg($head, $message)) {
$message = $head.$message;
}
//處理結束串
if(!ereg("\n\.\n", $message))
$message .= "\n.\n";
$this->show_debug($message, "out");
fputs($this->fp, $message);
$this->lastact="QUIT\n";
if(!$this->do_command($this->lastact, "250")){
fclose($this->fp);
return false;
}
}
return true;
}else{
$this->show_debug("連接失敗!!", "in");
return false;
}
}
}
?>

使用socket發送郵件示例:

include ("./sendmail.class.php");
$mail = new sendmail();
$email = "您好,這是一個測試郵件!";
$sendmail = new send_mail("smtp.mail.126.com","PHPBOOK",true); //顯示調示信息
if($mail->send("[email protected]", "[email protected]", "測試SOCKET郵件", $email)) {
echo "發送成功!
";
}else{
echo "發送失敗!
";
}
?>

『叄』 linux中如何卸載sendmail服務

linux中sendmail服務卸載sendmail:

# yum remove sendmail

linux中sendmail服務停止服務:
# /etc/init.d/sendmail stop

linux中sendmail服務取消回自動啟動答:
# chkconfig --levels 345 off sendmail

『肆』 linux怎麼用命令發送郵件

linux系統默認開啟發送郵件功能,但只能linux用戶間發送郵件,不能發送外部郵件。
方法版:
1. 查看sendmail進程是否開啟。你權在shell輸入 ps -aux | grep 'sendmail'
2. 使用mail命令發送郵件,例如發送給root用戶
mail -s 'send mail' root 按回車鍵
3. 輸入郵件內容
4. 按ctrl+d發送,按ctrl+c退出
5. 切換到root用戶,你就可以看到一封郵件,郵件存放在/var/mail/root文件里
mail命令用法:mail -s '郵件標題' 用戶名
你可以搜索mail命令
是否可以解決您的問題?

『伍』 linux sendmail pop3 怎麼設定!

其一,安裝POP3伺服器。

在Linux的安裝過程中,無論是否選擇Everything,系統都不會安裝POP3和IMAP協議伺服器,所以必須自己手動安裝。首先要注意,POP3伺服器程式在imap的RPM包中。

1.首先將光碟放入光碟機,然後使用命令:mount /dev/cdrom;

2.其次是進入光碟中RPM包的目錄,使用命令如下:cd /dev/cdrom/RedHat/RPMS;

3.然後是安裝RPM包,使用命令如下:

rpm ?i imap-4.7-5.i386.rpm;

4.最後是將光碟機卸載,使用命令如下:umount /dev/cdrom。

安裝過程結束。

需要說明的是:POP3協議的伺服器是在IMAP的包中,這個能通過運行:rpm ?q ?l ?p imap-4.7-5.i386.rpm,來查看rpm包的內容。

其二,讓Linux在啟動時自行啟動POP3服務。

只有一個步驟:使用vi或其他編輯工具,在/etc/inetd.conf中找到以#pop3開頭的一行,將該#去掉。

其三,為了讓用戶在地址中能夠使用域名,而不是ip地址,必須對sendmail進行如下設置:

打開/etc/sendmail.cw文件,在其中加入伺服器主機名,這里應該這樣一行:

etran.com

伺服器端一切OK。

『陸』 如何在Linux下安裝Sendmail伺服器軟體的方法

Red Hat Linux9.0操作系統 Sendmail郵件伺服器
一.安裝Sendmail
完全安裝Red Hat Linux 9.0時,Sendmail就會自動內置,版本號為8.12.8-4。如果你不確定Linux是否已經安裝有sendmail,可以輸入以下命令查看:
[root@ahpeng root] rpm–qagrep sendmail
如果確定沒有安裝,請在圖形界面下依次選擇單擊「主菜單-系統設置-添加刪除應用程序」,然後在打開的「軟體包管理」窗口裡選中「郵件伺服器」選項,點「更新」後按照提示安裝即可。
另一種辦法是:直接插入Linux第1張安裝光碟,選擇/RedHat/RPMS目錄下的sendmail-8.12.8-4.i386.rpm安裝包,之後運行[root@ahpeng RPMS] # rpm -ivh sendmail-8.12.8-4.i386.rpm即可開始安裝,再用此方法在第3張安裝光碟的同目錄下依次安裝sendmail-cf.8.12.8-4.i386.rpm、sendmail-doc. 8.12.8-4.i386.rpm。
二.啟動Sendmail服務系統
筆者建議使用帶參數的Sendmail命令控制郵件伺服器的運行:
[root@ahpeng root]#sendmail -bd –q12h
-b:設定Sendmail服務運行於後台。
-d:指定Sendmail以Daemon(守護進程)方式運行。
-q:設定當Sendmail無法成功發送郵件時,就將郵件保存在隊列里,並指定保存時間。上面的12h表示保留12小時。
此外,要檢測Sendmail伺服器是否正常運行,可以使用命令行:
[root@ahpeng root]# /etc/rc.d/init.d/sendmail status。
三.配置Sendmail
sendmail.cf的配置語法比較難懂,一般資料上都是採用m4宏處理程序來生成所需的sendmail.cf文件(使用m4編譯工具一般不容易出錯,還可避免某些帶有安全漏洞的宏對伺服器造成的破壞)。其配置文件位於/etc/mail/sendmail.cf,在創建的過程中還需要一個模板文件,Linux自帶有一個模板文件,位於/etc/mail/sendmail.mc。故可以直接通過修改sendmail.mc模板來達到定製sendmail.cf文件的目的,而不必去死啃哪些難理解的配置命令。配置步驟為:
第一步:用模板文件sendmail.mc生成sendmail.cf配置文件,並導出到/etc/mail/目錄下,使用命令行:m4 /etc/mail/sendmail.mc >/etc/mail/sendmail.cf
第二步:再用[root@ahpeng root] /etc/rc.d/init.d/sendmail restart命令行重啟sendmail。
至此,郵件服務系統配置完成,已經正常工作。接下來就是創建具體的帳戶了。

『柒』 sendmail 在linux 中如何啟動

分類: 電腦/網路 >> 操作系旁散統/系統故障
解析:

Sendmail的配置十分復雜。它的配置文件是sendmail.cf,位於/etc/mail目錄下。由於sendmail.cf的語法深奧難懂,很少有人會直接去修改該文件來對Sendmail伺服器進行配置。我們一般通過m4宏處理程序來生成所需的sendmail.cf文件。創建的過程中還需要一個模板文件,系統默認在/etc/mail目錄下有一個sendmail.mc模板文件。

我們可以根據簡單、直觀的sendmail.mc模板來生成sendmail.cf文件,而無需直接編輯sendmail.cf文件。可以直接通過修改sendmail.mc模板來達到定製sendmail.cf文件的目的。這里介紹創建sendmail.cf文件的步驟:

(1)備份原亮物有sendmail.cf文件

在終端敬啟液命令窗口運行以下命令:

cp /etc/mial/sendmail.cf /etc/mail/sendmail.cf.BAK

(2)生成sendmail.cf文件

根據sendmail.mc模板文件產生sendmail.cf配置文件,並導出到/etc/mail/目錄下:

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

(3)重啟sendmail服務

[root@ahpeng root] /etc/rc.d/init.d/sendmail restart

很顯然,用m4宏編譯工具創建sendmail.cf文件比較方便,而且不容易出錯,更可以避免某些帶有安全漏洞或者過時的宏所造成的破壞。一個sendmail.mc模板的大致內容如下:

divert(-1)dnl

......

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

VERSIONID('setup for Red Hat Linux')dnl

OSTYPE('linux')dnl

......

dnl #

dnl define('SMART_HOST',' *** tp.your.provider')

dnl #

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

define('confTRUSTED_USER', ' *** msp')dnl

dnl define(′confAUTO_REBUILD′)dnl

......

這里介紹sendmail.mc模板的語法組成:

dnl:用來注釋各項,同時dnl命令還用來標識一個命令的結束。

divert(-1):位於mc模板文件的頂部,目的是讓m4程序輸出時更加精簡一些。

OSTYPE ('OperationSystemType'):定義使用的操作系統類型,顯然這里應該用linux代替OperationSystemType,注意要用一個反引號和一個正引號把對應的操作系統類型括起來。

define:定義一些全局設置,對於Linux系統,設置了OSTYPE之後,可以定義下面的一些全局參數,如果不定義,就使用默認值。這里舉兩個簡單例子:define('ALIAS_FILE','/etc/aliases')

定義別名文件(alia file)的保存路徑,默認是/etc/aliases

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

sendmail的狀態信息文件。

以上只是sendmai.mc的一些簡單的語法解釋,更多的參數含義及其配置信息可以參見sendmail/m4/eaking_config。

為新用戶開電子郵件賬號

在Linux里為新用戶開設電子郵件賬戶比較簡單,只需在Linux系統里新增一個用戶即可。單擊"主菜單→系統設置→用戶和組群"菜單項,打開"Red Hat用戶管理器"對話框,單擊"添加用戶"按鈕,在出現的"創建新用戶"對話框里指定用戶名、登錄口令即可,如圖3所示。

假設我們添加了一個用戶Peter(密碼為peter),這樣該用戶就有了一個郵件地址Peter@YourDomain(此處的YourDomain用你自己域名代替)。

以上過程也可以在終端命令窗口運行以下命令來實現:

[root@ahpeng root]#adser peter -p peter

為電子郵件賬戶設置別名

有一些用戶想使用多個電子郵件地址,是不是需要創建多個郵件賬號呢?我們可以使用別名(alias)來解決這個問題。

比如說,用戶peter想擁有以下3個電子郵件地址:

peter@YourDomain、dearpeter@ YourDomain、truepeter@ YourDomain。

我們可以通過以下步驟來實現這樣的別名設置:

新增一個賬號peter;然後用vi、或者Kate等文本編輯器打開/etc/aliases,在裡面加上兩行:

dearpeter: peter

truepeter: peter

保存該/etc/aliases退出。

不過,就這樣還不能讓Sendmail接受新增的別名,我們必須在終端命令窗口運行newaliases命令,以要求Sendmail重新讀取/etc/aliases文件。如果一切無誤,應該可以看到類似以下的回應消息:

[root@ahpeng root]# newaliases

/etc/aliases: 63 aliases, longest 10 bytes, 625 bytes total

這樣,發給peter的郵件可以使用3個郵件地址,而peter只需要使用一個電子郵件賬號peter@YourDomain就可以接收所有寄給以上3個地址的電子郵件。

指定郵箱容量限制

當一個郵件伺服器為許多人提供郵件服務時,無 *** 的電子郵件將很容易塞滿伺服器的硬碟,造成硬碟負擔。如果不想為用戶提供無限空間的郵件暫存空間,可以使用"郵件限額"來給用戶一個有限的暫存空間。

其實,它是利用磁碟配額功能來實現的。電子郵件的暫存空間是在/var/spool/mail目錄下,只要通過磁碟配額設定每一個用戶在這個目錄下能使用的最大空間即可。

支持POP和IMAP功能

到現在為止,我們已經可以用Outlook Express發送郵件,或者登錄伺服器使用mail、pine命令收取、管理郵件。但是還不能用Outlook Express等客戶端從伺服器下載郵件,這是因為Sendmail並不具備POP3(IMAP)的功能,所以我們必須自己安裝。

(1)POP和IMAP伺服器安裝

安裝Red Hat Linux 9.0時,可以選擇安裝POP和IMAP伺服器,可以在終端命令窗口運行以下命令進行驗證:

[root@ahpeng root]# rpm -qa imap

imap-2001a-18

如果沒有安裝,可以將第2張安裝光碟放進光碟機,然後在終端命令窗口運行以下命令即可開始安裝:

[root@ahpeng root]#cd /mnt/cdrom/RedHat/RPMS

[root@ahpeng root]#rpm -ivh imap-2001a-18.i386.rpm

由於Red Hat Linux 9.0已經將POP和IMAP打包成一個單獨的套件,安裝好imap-2001a-18.i386.rpm,就會同時安裝這兩個伺服器

(2)啟動POP和IMAP服務

要成功啟動POP和IMAP伺服器,首先要確定這些服務存在於/etc/services文件,確保以下的服務前面沒有加上#注釋(如果有,必須去除注釋)。

imap 143/tcp imap2 # Interim Mail Access Proto v2

imap 143/udp imap2

pop2 109/tcp pop-2 postoffice # POP version 2

pop2 109/udp pop-2

pop3 110/tcp pop-3 # POP version 3

pop3 110/udp pop-3

修改好/etc/services文件,接下來就要對相應服務配置文件進行定製:

啟動POP3服務:必須修改/etc/xid.d/ipop3文件,將其中的"disable=yes"改為"disable=no",保存該文件。最後必須重新啟動xid程序來讀取新的配置文件,使得設定內容生效:

[root@ahpeng root]#/etc/rc.d/init.d/xid reload

啟動IMAP服務:必須修改/etc/xid.d/imap文件,將其中的"disable = yes"改為"disable =no",保存該文件。最後必須重新啟動xid程序來讀取新的配置文件,使得設定內容生效:

[root@ahpeng root]#/etc/rc.d/init.d/xid reload

設置好以後,就可以在Outlook Express裡面設置好郵件賬號,以後就可以直接利用Sendmail伺服器進行收發郵件了,由於郵件伺服器就在本地區域網,所以速度很快。

『捌』 5.30 電子郵件sendmail試驗

估計時間: 2個小時

目標: 建立基本的MTA的配置的技能

試驗的起點: 標準的Red Hat Linux安裝

確保在Server1上的sednmail.mc文件中的DAEMON_OPTIONS被注釋並且重新編譯sendmail.cf文件使得能夠接受來自其他主機的電子郵件。

介紹

本次實驗作為一個安裝和配置MTA的介紹。在介紹中我們將提及sendmail和postfix。您可以選擇任何一個MTA,如果時間允許,您兩個都可以做一下試驗。在接下來的步驟中,您將

1. 安裝並且驗證sendmail的「發件箱」

2. 為您的sendmail的安裝添加新的別名

3. 使用m4工具來改變您的轉發行為

4. 安裝POP3伺服器並且配置POP客戶端

在整個試驗中,主機和域名取決於您的機器的IP地址。如果下面的試驗出現了X字樣的名稱,您應該把X字樣的名稱替換成你的工作站的號碼(您的IP地址的最後一個部分)。例如,如果您的工作站的IP的地址是192.168.0.2,您應該將stationX.domainX.example.com轉換成station2.domain2.example.com。

將數據包過濾設定為無效狀態。在本次試驗開始之前,請您確保您的主機上的所有包過濾已被關閉(顯然,在實際使用中您可以利用Linux內核的防火牆機制,然而我們在這里關掉它是為了減少潛在的問題)。

本次試驗中以root身份來使用下面命令達成上面的要求:

service iptables stop

chkconfig iptables off

初始化安裝-安裝必要的軟體包

下列軟體包對於sendmail是必需的: sendmail,sendmail-cf,sendmail-doc,m4和procmail。對於postfix而言,您需要: postfix。如果需要他們,從CD上進行檢視和安裝,server1的NFS安裝點,從: ftp://server1/pub/RedHat/RPMS/

為了安全的原因,sendmail和postfix的預設的配置允許發郵件但是不允許從網路上接收郵件(預設的它們只接受從回環介面上的連接)。按照如下配置您選擇的MTA使得它接受傳入的連接:

⑴ 對於sendmail: 修改 /etc/mail/sendmail.mc使用dnl注釋在下面的行之前,就像這樣:

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

⑵ 將您的sendmail.cf文件做一個備份:

cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.orig

⑶ 在同一個目錄下,編譯sendmail.cf

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

⑷ 重新啟動sendmail,通過

service sendmail restart

對於postfix:修改/etc/postfix/main.cf

⑴. 找到並注釋如下行

inet_interfaces = localhost

⑵. 取消注釋該行:

inet_interfaces = all

⑶. 保存文件並且進行到步驟2 的結束的地方。找到和上面一樣的對應於postfix的配置的地方。

對於sendmail: 有幾個步驟您應該採用,以確保sendmail被正確安裝。

⑴. 確信sendmail已經被在適當的運行級別上運行

檢查您的sendmail被適當的配置且能夠在重新啟動以後其能夠運行。使用chkconfig是比較方便的。

chkconfig -–list sendmail

sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off

如果sendmail在標準的用戶運行級別時無效,使用chkconfig,ntsysv 或者serviceconf 之類的工具來激活服務。

⑵. 確定sendmail沒有在啟動的時候出現錯誤

Red Hat Linux安裝的時候使用提供的syslog工具來記錄所有的信息到文件/var/log/maillog中去。檢查此文件中的最後出現「starting」的地方以確保sendmail在啟動的時候沒有任何錯誤。

sendmail可執行文件位於/usr/sbin/sendmail。為了確定sendmail是否正確標識您的主機名稱,通過命令行開關開啟其調試模式並且設定為0:

sendmail –d0 < /dev/null

Version 8.11.6

Compiled with: LDAPMAP MAP_REGEX LOG MATCHGECOS MIME7TO8 MIME8TO7

NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS QUEUE SASL SCANF

SMTP TCPWRAPPERS USERDB

============ SYSTEM IDENTITY (after readcf) ============

(short domain name) $w = station2

(canonical domain name) $j = station2.example.com

(subdomain name) $m = station2

(node name) $k = station2.example.com

Recipient names must be specified

如果sendmail返回您的主機名稱為localhost,您可能錯誤配置了/etc/hosts文件。檢查您的/etc/hosts文件,刪除所有的但記住留下localhost的指向。如果/etc/hosts文件是正確的,那麼檢查一下在/etc/sysconfig/netwoek中的HOSTNAME的定義。

試圖向root@server1發送簡單的郵件。您可以看到一個合理的您的主機的轉發伺服器的SMTP交換。

#echo 「hello root」 | mail –v –s hello root@server1

root@server1... Connecting to [127.0.0.1] via relay...

220 localhost.localdomain ESMTP Sendmail 8.12.8/8.12.8; Mon, 22 Sep 2003 14:29:24 +0800

>>> EHLO localhost.localdomain

250-localhost.localdomain Hello station1 [127.0.0.1], pleased to meet you

...

>>> MAIL From: SIZE=52 [email protected]

250 2.1.0 ... Sender ok

>>> RCPT To:

>>> DATA

250 2.1.5 ... Recipient ok

354 Enter mail, end with "." on a line by itself

>>> .

250 2.0.0 h8M6TOU5026513 Message accepted for delivery

[email protected]... Sent (h8M6TOU5026513 Message accepted for delivery)

Closing connection to [127.0.0.1]

>>> QUIT

221 2.0.0 localhost.localdomain closing connection

如果SMTP交換向上面一樣正確,那麼消息將被轉發到您的工作站上的本地的轉發伺服器上,並且mailq –Ac將會報告一個空的對列。接下來檢查mail(不使用參數)來檢查一下消息是否從本地的轉發到server1。這樣對列也應該是空的。

您的消息是不是在/var/log/maillog中正確的記錄呢?在下面的步驟中,監視文件/var/log/maillog。下面的命令將會十分的有用:

xterm –e tail –f /var/log/maillog &

對於postfix:

⑴. 運行『service sendmail stop』,接下來使用redhat-switch-mail使得postfix成為活躍的MTA。您也可以使用如下的命令行:

alternatives –set mta /usr/sbin/sendmail.postfix

⑵. 確保postfix在合適的運行級別有效:

chkconfig -–list postfix

postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off

⑶. 確定hostname命令正確的返回您的主機名稱。應該是您的FQDN。

如果sendmail返回您的主機名稱為localhost,您可能錯誤配置了/etc/hosts文件。檢查您的/etc/hosts文件,刪除所有的但記住留下localhost的指向,然後再試一遍。如果/etc/hosts文件是正確的,那麼檢查一下在/etc/sysconfig/netwoek中的HOSTNAME的定義。當這些值都正確的時候,啟動postfix服務。

⑷. 確定postfix在啟動的時候沒有錯誤

和sendmail一樣,Red Hat Linux的安裝使用提供的syslog工具來記錄所有的信息到文件/var/log/maillog中去。檢查此文件中的最後查找任何錯誤信息。

試圖向root@server1發送簡單的郵件並且檢查/var/log/maillog的記錄文

mail –s `echo $USER` root@server1 < /etc/redhat-release

應該是如下所示:

Sep 22 02:51:50 station1 postfix/pickup[2865]: A20ED348389: uid=0 from=

Sep 22 02:51:50 station1 postfix/cleanup[3534]: A20ED348389: message-id=<2003092

[email protected] >

Sep 22 02:51:50 station1 postfix/nqmgr[2866]: A20ED348389: from=<[email protected] span=""> </[email protected]>

xample.com>, size=341, nrcpt=1 (queue active)

Sep 22 02:51:51 station1 postfix/smtp[3536]: A20ED348389: to=<[email protected] span=""> </[email protected]>

82>, relay=192.168.241.182[192.168.241.182], delay=1, status=sent (250 Message q

ueued)

對於sendmail:

在sendmail決定消息的接受者的目的地的之前,其先試圖在別名中查找。Sendmail的主要的別名配置文件是/etc/aliases。為了優化查找,sendmail為其別名記錄建立了一個哈希表資料庫/etc/aliases.db.該文件通過newalias命令產生(該命令是sendmail –bi的同名)

下列命令將增加用戶student(如果不存在的話)

useradd student

在/etc/aliases 行加入如下的行:

me: student

wizards: root, me

methere: [email protected]

現在運行newalias 命令來更新資料庫,嘗試發送郵件給您定義的收件人:

newalias

echo 「hello there」 | mail –s 「hello」 m

echo 「hello there」 | mail –s 「hello」 wizards

echo 「hello there」 | mail –s 「hello」 methere

您是否得到了期望的結果?是否所有的位於wizards的收件人都收到了郵件?如果沒有,su – 到不是root的用戶再試一次。

在postfix決定消息的接受者的目的地的之前,其先試圖在別名中查找。Postfix的主要的別名配置文件是/etc/postfix/aliases。為了優化查找,postfix為其別名記錄建立了一個哈希表別名資料庫/etc/postfix/aliases.db(和sendmail類似).該文件通過newalias命令產生。

下列命令將增加用戶student(如果不存在的話)

useradd student

在/etc/postfix/aliases 行加入如下的行:

注意:注釋root別名的那一行為postfix

me: student

wizards: root, me

methere: [email protected]

現在運行newalias 命令來更新資料庫,嘗試發送郵件給您定義的收件人:

newalias

echo 「hello there」 | mail –s 「hello」 me

echo 「hello there」 | mail –s 「hello」 wizards

echo 「hello there」 | mail –s 「hello」 methere

您是否得到了期望的結果?是否所有的位於wizards的收件人都受到了郵件?

轉發允許郵件通過使用中間的「轉發」及其傳遞到其目的地。盡管這個功能曾經有用,但是轉發已經成為Internet上垃圾郵件的源泉了。人們希望發送主動提供的的郵件的時候希望使用轉發機制,從而使得郵件發源地很難被偵測出來。

下列步驟將使用下面的主機。替換X,Y和Z為適合的工作站的號碼:

stationX:源機器,郵件從這里發出

stationY:轉發機器,這里郵件從發送者送出

stationZ:目的機器,郵件的最終目的

該步驟假設您是stationX,轉發機器,與某人的stationY合作,該機器為郵件的源頭。在該步驟中,注意/var/log/maillog的變化。下列命令將會顯得十分的有用。

對於sendmail

步驟⑴ :允許轉發

您具有控制允許誰在您的機器上轉發的能力。通過控制您的機器的混雜轉發,您可以使得任何人都能夠將您的機器作為轉發的主機。(我們對於這種的嘗試表示反對,也希望通過該實驗顯示出其缺陷)。配置/etc/mail/sendmail.mc, 通過加入如下行使得m4前置處理器允許混雜轉發:

/etc/mail/sendmail.mc

(…其他的內容…)FEATURE(promiscuous_relay)dnl

使用m4前置處理機通過這個模板文件生成一個新的sendmail配置文件,然後將新生成的文件與通過sendmail RPM軟體包提供的進行比較

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.test-relay

diff /etc/mail/sendmail.test-relay /etc/mail/sendmail.cf

使用混雜轉發以後會有多大的不同呢?現在將新建立的sendmail.test放置在恰當的位置上,重新啟動sendmail.

mv /etc/mail/sendmail.cf /etc/mail/sendmail.cf.accept-mail

cp /etc/mail/sendmail.test-relay /etc/mail/sendmail.cf

service sendmail restart

讓您的夥伴扮演惡意的垃圾郵件的發送者,該人能夠通過telnet到您的機器上的smtp(sendmail)的25號斷口,進行垃圾郵件發送地址的欺騙,在stationY鍵入如下命令:

這個例子對於stationY(源機器) station2,並且stationX(轉發,在這里目的機器) station1

[root@station1 root]# telnet station1 25

Trying station1.example.com...

Connected to station1.example.com (station1.example.com).

Escape character is '^]'.

220 station1.example.com (IMail 8.00 8-1) NT-ESMTP Server X1

helo mail.cracker.org

250 hello station1.example.com

mail from: [email protected]

250 ok

rcpt to:[email protected]

250 ok its for [email protected]

data

354 ok, send it; end with .

Subject: Faked

this was faked!

250 Message queued

quit

221 Goodbye

Connection closed by foreign host.

垃圾郵件現在送到您的機器上了。下一步,看看您的夥伴能不能從您的機器轉發給第三台機器:

這個例子對於stationY(源機器) station2,並且stationX(轉發,在這里目的機器) station1,並且stationZ(目的機器) station3

[root@station1 root]# telnet station1 25

Trying station1.example.com...

Connected to station1.example.com (station1.example.com).

Escape character is '^]'.

220 station1.example.com (IMail 8.00 9-1) NT-ESMTP Server X1

helo mail.craker.org

250 hello station1.example.com

mail from: [email protected]

250 ok

rcpt to [email protected]

250 ok its for [email protected]

data

354 ok, send it; end with .

Subject: Relayed

this was faked any relayed!

250 Message queued

quit

221 Goodbye

Connection closed by foreign host.

由於您的機器已經被配置成為允許混雜轉發,垃圾郵件可以通過您的機器進行郵件轉發。

對於postfix:

您具有控制允許誰在您的機器上轉發的能力。預設的postfix允許在子網上的任何人通過您的機器進行轉發。但是並不是在每一個環境中都安全的。例如,您的機器和其他機器在一起,如果您的本地子網里有一台機器被其他人控制,那麼其他的機器都會有麻煩。

讓您的夥伴扮演惡意的垃圾郵件的發送者,該人能夠通過telnet到您的機器上的postfix的25號斷口,進行垃圾郵件發送地址的欺騙,在stationY鍵入如下命令:

[root@station1 root]# telnet station1 25

Trying 127.0.0.1...

Connected to station1 (127.0.0.1).

Escape character is '^]'.

220 station1.example.com ESMTP Postfix

helo mail.craker.org

250 station1.example.com

mail from:[email protected]

250 Ok

rcpt to: [email protected]

250 Ok

data

354 End data with .

Subject: Faked

this was faked!

.

250 Ok: queued as 4FFA2348389

quit

221 Bye

Connection closed by foreign host.

垃圾郵件現在送到您的機器上了。下一步,看看您的夥伴能不能從您的機器轉發給第三台機器:

這個例子對於stationY(源機器) station2,並且stationX(轉發,在這里目的機器) station1,並且stationZ(目的機器) station3

[root@station1 root]# telnet station1 25

Trying 127.0.0.1...

Connected to station1 (127.0.0.1).

Escape character is '^]'.

220 station1.example.com ESMTP Postfix

helo mail.craker.org

250 station1.example.com

mail from: [email protected]

250 Ok

rcpt to: [email protected]

250 Ok

data

354 End data with .

subject: Relayed

this was faked and relayed!

.

250 Ok: queued as 69C7B348389

quit

221 Bye

Connection closed by foreign host.

由於您的機器已經被配置成為允許混雜轉發,垃圾郵件可以通過您的機器進行郵件轉發。

步驟⑵ :不允許轉發

對於sendmail

通過替換新的sendmail.cf為接受傳入的信件的配置文件來恢復預設的sendmail的配置,並且重新啟動sendmail:

mv /etc/mail/sendmail.cf.accept-mail /etc/mail/sendmail.cf

service sendmail restart

讓您的夥伴再從stationY轉發垃圾郵件。您的sendmail還是一個轉發器么?任何一個轉發的都會產生如下的消息:

550 [email protected] .. Relaying denied

對於postfix

編輯文件/etc/postfix/main.cf取消轉發。

查找並且取消注釋下面的行,並且重新啟動postfix

mynetworks_style = host

讓您的夥伴再從stationY轉發垃圾郵件。您的postfix還是一個轉發器么?任何一個轉發的都會產生如下的消息:

554 : Recipient address rejected: Relay access denied

步驟⑶ :選擇性的轉發

對於sendmail

對於特定的主機,域或者網路,編輯/etc/mail/access並且重新啟動sendmail。為了允許所有在example.com域中的機器可以把您的機器作為郵件轉發伺服器,你在/etc/mail/acces中添加如example.com域。和您的夥伴使用場景A中的命令進行測試。

對於postfix

對於特定的主機,域或者網路,編輯/etc/postfix/main.cf並且重新啟動postfix。對於特定的主機允許通過您的機器進行轉發,找到並且取消注釋該行:

mynetworks_style = host

然後添加新行來允許轉發的主機和網路,在這里允許station1和本地轉發

mynetworks = 192.168.0.1, 127.0.0.0/8

和您的夥伴使用場景A中的命令進行測試。

在這個步驟中,你將配製您的機器stationX作為郵件的POP3伺服器,使得您的在stationY的夥伴扮演POP客戶端的角色。

步驟⑴ :安裝POP3伺服器

配置一個POP3伺服器比較簡單,只需要兩個步驟:

① 安裝相關的RPM軟體包

② 在xinetd中允許服務

① 安裝相關的RPM軟體包

POP守護進程和其他的具有相同功能的守護進程,例如IMAP守護進程綁定在軟體包imap中。再如xinetd,krb5-libs*和imap軟體包來檢查imap軟體包含有什麼軟體。

三個守護進程被包括進來:imapd,ipop2d和ipop3d。POP3被用在很多Internet服務提供商,POP2提供是為了向後兼容。IMAP守護進程提供了根加復雜的能力,包括了在伺服器端的文件夾的管理。

② 在xinetd中允許服務

對於本實驗,我們僅選定POP3服務。ipop3d通過xinetd在請求的時候被啟動。為了激活,運行下面的命令:

service xinetd start

chkconfig ipop3 on

查看一下/etc/xinetd.d/ipop3。顯式的重新啟動xinetd並不是必需的,由於chkconfig發送給xinetd 一個USR2信號告訴他重新調入其配置。

確認服務

運行下面的命令確認服務已經被正確的安裝。下面的命令只是一個指導:

echo 「mail to be poped」 | mail –s 「Hello student」 student

[root@station1 root]# telnet localhost 110

Trying 127.0.0.1...

Connected to station1 (127.0.0.1).

+OK POP3 station1 v2001.78rh server ready

USER student

+OK User name accepted, password please

PASS student

+OK Mailbox open, 1 messages

list

STAT

+OK 1 440

TOP 1 99999

retr 1

+OK Top of message follows

Return-Path: [email protected]

Delivered-To: [email protected]

Received: by station1.example.com (Postfix, from userid 0)

id 72314348390; Mon, 22 Sep 2003 08:02:27 -0400 (EDT)

To: [email protected]

Subject: Hello student

Message-Id: [email protected]

Date: Mon, 22 Sep 2003 08:02:27 -0400 (EDT)

From: [email protected] (root)

Status:

mail to be poped

.

DELE 1

+OK Message deleted

QUIT

+OK Sayonara

Connection closed by foreign host.

如果一切順利的話,您現在有一個安裝好的POP伺服器了。

步驟⑵ :使用POP客戶端

所有的現在的郵件用戶代理(MUA),例如netscape,elm,Outlook,pine和mutt都是使用POP的,可以被用作POP的客戶端。每一個的配置都有所不同。同樣有一個流行字元界面的的POP客戶端叫做fetchmail。fetchmail是高度的可配置的,可以查詢多個郵箱,可以作為守護進程運行,這樣使得其每五分鍾查詢用戶的郵箱。fetchmail在主機上遞送郵件到郵件傳送代理(MTA),例如sendmail。我們將勾畫出以後如何安裝fetchmail和使用其來查詢我們裝過的POP伺服器。

從CD或者從 ftp://server1/pub/RedHat/RPMS來安裝fetchmail軟體包

注意到有很多選項可以影響fetchmail的行為。建立一個~/.fetchmailrc文件如下所示:

~student/.fetchmailrc

poll stationX.exmaple.com with protocol pop3: user studentXX there is user studentXX here password 「password」

由於密碼存儲在該文件中,因此fetchmail將會拒絕運行除非您把該文件的屬性設定為對於僅僅文件的所有者只讀。注意還可以使用chown改變由root創建的文件的所有者為studentXX。

chmod 600 ~student/.fetchmailrc

chown student.student ~student/.fetchmailrc

嘗試使用studentXX登陸到POP3郵

echo 「hello student」 | mail –s 「Hola」 student

su – student

fetchmail –v

exit

fetchmail能不能接收到student的POP郵件?將遞送student的郵件到哪裡?比從本地獲取POP郵件有意義么?

讓您的夥伴在另外一台機器上建立相同的~/.fetchmailrc文件(或者配置其它諸如mozilla的MTA)試圖從您的伺服器上進行收信。

⑴ m4宏語言提供給sendmail管理哪些東西?把所有的在xyz.com的用戶郵件導向到本地用戶xzplogin該使用什麼語法?該在什麼文件的和處填上這句話?

⑵ mailq命令用來作什麼?您如何使用?

⑶ 當命令sendmail –q發出以後,sendmail將會試圖仍在隊列中等待的郵件。何時使用該命令是有用的?

⑷ 如果去除FEATURE(accept_unresolvable_domains)的注釋將對垃圾郵件產生如何的影響?

⑸ m4有什麼特徵允許sendmail發送郵件作為整個域(例如,「example.com」)而不是完全的符合標準的主機名稱(例如,「mail.example.com」)?

⑹ 在postfix中mynetworks_style如何影響轉發?
請您查看文件/etc/postfix/main.cf。

⑺ 在文件/etc/postfix/access中需要如何的活躍的變化?

閱讀全文

與linuxsendmail隊列相關的資料

熱點內容
計算機網路技術與應用視頻 瀏覽:924
linux裝apache 瀏覽:272
手機谷歌打不開網站怎麼辦 瀏覽:110
燈控台編程好了怎麼使用 瀏覽:342
如何用金山毒霸切斷網路連接 瀏覽:873
怎麼設置文件打開密碼怎麼設置 瀏覽:5
網路小說用什麼寫 瀏覽:956
擴展名為rm的文件如何打開 瀏覽:707
導入android項目沒有rjava 瀏覽:899
帶英文和數字的文件名 瀏覽:843
黃山數控編程培訓在哪裡 瀏覽:111
win10俠盜5無限讀取 瀏覽:557
js工廠模式 瀏覽:927
iphone6s清理緩存 瀏覽:465
ug編程怎麼選不上字體 瀏覽:435
pc文件加密哪個好 瀏覽:393
蘋果軟體更新4位密碼 瀏覽:96
手機如何將文件弄成文件夾 瀏覽:275
swordigo第四關 瀏覽:996
t420win10網卡驅動 瀏覽:805

友情鏈接