iT邦幫忙

0

sendmail上的openwebmail無法發信

zpple 2009-08-11 16:20:5014571 瀏覽

請問一下
我安裝了openwebmail後,若從openwebmail上直接發信會顯示smtp錯誤訊息,而無法發信,但若從client程式(outlook)就可以正常寄信,這是為什麼呢

看更多先前的討論...收起先前的討論...
可能比較新的 webmail 較可以處理不同字碼的問題嗎?
可試試:
http://roundcube.net/
或參考:
10個基於Ajax的PHP Webmail客戶端
zpple iT邦新手 3 級 ‧ 2009-08-17 10:44:24 檢舉
我預設是以en為主,因為公司有美國人,日本人,我怕改了後,反而他們看不懂
zpple iT邦新手 3 級 ‧ 2009-08-17 10:54:37 檢舉
忘了問個問題,如果想換webmail,那要如何移除openwebmail呢
zpple iT邦新手 3 級 ‧ 2009-08-17 11:16:33 檢舉
roundcube看起來不錯,但它指用imap去收信,所以我可以不用和原本的sendmail安裝在同一台機器上,只需要另外開一台機器,然後安裝完後就能收信了嗎,是否在另外一台機器上也要安裝mail server,讓這台mail server去收原本sendmail的信呢
同樣叫做 webmail 但運作的形式上有些不大一樣。
以 openwebmail 而言,就算所要讀取的 mail server 上,沒有跑 pop3 或 imap ,一樣可以順利執行,是因為OWM是直接讀取 /var/mail 上的檔案。所以OWM的前提是要與 mail server同一台,如果要切開成不同台的話,至少也要用 NFS 把mail server 上的 /var/mail 掛到自己的目錄下,就可執行。
而 webmail 要求是用 pop3 或 imap 的,就把該 webmail 想成是一種 網路上多人用的 outlook、mail client,要不要架在同一台 mail server 上,都可以。
原來的 mail server 也可以加跑 imap,然後在另一台架 以 imap 存取的 webmail 的服務,但 imap 長期使用,會有使用者 quota 存放舊信件的衍伸問題。
移除 OWM 就把 web目錄/cgi-bin/openwebmail 給改掉名稱或刪掉就成了。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

10
逮丸逮丸
iT邦大師 1 級 ‧ 2009-08-12 09:19:12
最佳解答

試用以下步驟來檢測,是哪一部份出的問題:

  1. telnet localhost 25,不通的話,是防火牆擋了 localhost 的 port 25 。修改防火牆的 rule ,至少要讓這一步驟是沒有問題。
  2. 在該機器上面安裝使用 其他的 mail 軟體來寄信,可安裝 pine (新版是 alpine)或 mutt 測試。
  3. 測試寄給本機使用者能否成功:
    a.在2.的mail軟體寄信,收信者只要寫 root ,是否可以寄得成。至少這個一定可以。
    b.若連本機的 user 的寄不出,可能是改了什麼設定造成的。因OS預設的mail server設定,至少能寄給本機user。
  4. 測試寄到外面,是否寄得成?
    a.若有問題,則是 寄件人的 @ 後面的名稱,是 DNS 所查不到的,所以寄不出去。所以要在 mail 軟體裡,去定義寄出的信的 @ 後面是 DNS 查詢得到的。
    b.若沒問題,才輪到檢查是否 openwebmail 的問題。
    5.在 openwebmail 的 etc/openwebmail.conf 所設的 domainnames 值是什麼?

在上述的 4. 一開始無法寄出的原因,在於一開始安裝 Linux 時,IP是什麼、自己所設的 host 是什麼的關係。
若 IP 為 1.2.3.4,且該IP的DNS是正反解對應為 hosta.abc.com 的話,
好像 Linux 在一開始安裝時就會偵測到,而自己又命名該機器名稱為 hosta.abc.com 的話,
這樣 sendmail 就會預設以 hosta.abc.com 的名義來送信出去而沒有問題,
機器上的 mail 軟體,也自動因 /etc/hosts 的檔案定義沒問題,也可順利寄出。

如果在安裝 Linux 沒有上述那樣順利的 /etc/hosts 正確名稱定義 的情形,
可能是因為在設這台Linux 名稱為 linux001,所以在 /etc/hosts 會自動產生像:

<pre class="c" name="code">
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost linux001
::1             localhost6.localdomain6 localhost6
2xx.1xx.2xx.1xx           linux001.xxx.com.tw linux001

而在網路上根本查不到 linux001.xxx.com.tw,所以如果在機器上的 mail 軟體沒特別定義 From 的話,就會以 不存在的 linux001.xxx.com.tw 的名義寄出,就當然寄不出去。

每次安裝 Linux 以來,/etc/hosts 的預設的 127.0.0.1 的那一行總不是那麼理想,後來就都修改成以下的內容:

<pre class="c" name="code">
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost
2xx.1xx.2xx.1xx         ms01.xxx.com.tw     ms01

機器上的 mail 軟體沒特別設定就都能順利直接寄出。

類比到 openwebmail 寄信的情況也是如此,如果所安裝的機器的 IP 不是 public IP,或者沒什麼 DNS 的正反解記錄的話,只要在 mail 的軟體定義好 From 是查得到的,就沒有問題,這就是為什麼 outlook 可以順利寄出的原因。同樣地,只要定義好 domainnames ,就可順利寄出。

看更多先前的回應...收起先前的回應...
zpple iT邦新手 3 級 ‧ 2009-08-12 09:49:05 檢舉

謝謝你的回答,step1~4都是ok的,/var/www/cgi-bin/openwebmail/etc中的openwebmail.conf domainnames目前設定成auto,而hosts中則是
127.0.0.1 localhost.localdomain localhost
10.15.1.1 mail.a.com.tw
domainnames也設定過mail.a.com.tw,也不會通
從openwebmail上的寄出時的錯誤為下
<<< 220 ESMTP

EHLO mail.a.com.tw
<<< 250-mail.a.com.tw Hello localhost.localdomain [127.0.0.1], pleased to meet you
<<< 250 ENHANCEDSTATUSCODES
MAIL FROM:<s@mail.a.com.tw>
<<< 550 5.0.0 Access denied

1.您 outlook 可寄得成功,是否寄件人 也是以 xxx@mail.a.com.tw 的名義寄?
還是以 a.com.tw 的名義寄?如果是後者, domainnames 設為 a.com.tw 試試。
2.如果 寄給收件人的地方 只有打 root 而已,是否可以順利寄成?

用 Hinet 的 DNS 查 mail.a.com.tw:
nslookup mail.a.com.tw 168.95.1.1
是否查得到該 IP 嗎?

zpple iT邦新手 3 級 ‧ 2009-08-12 17:33:47 檢舉

我試過用root@mail.a.com.twxxx@mail.a.com.tw,從outlook寄出都ok,從redhat中直接下指令mail xxxx也都可以(無論身份是root或xxx)
從htnet dns查,查不到ip,應是反解沒正常,但只有從openwebmail有問題

從redhat中直接下指令mail xxxx@gmail.com (或任何非公司內的外部信箱)是否可以?

有個不大可能的情況,但試試看:
/etc/hosts.allow 裡加入:
sendmail: ALL

redhat 的版本是多少?
sendmail 是哪一個版本?

zpple iT邦新手 3 級 ‧ 2009-08-13 10:46:54 檢舉

從redhat下指令mail是可以的,無論寄到公司or yahoo mail
在/etc/hosts.allow中,因為我們公司有委外做spam-mail,所以
sendmail : 10.15.1.0/255.255.255.0 150.87.0.0/255.255.0.0 : allow
sendmail : 192.168.4.3 10.17.252.2 10.12.7.16 10.12.7.8 10.10.12.10 10.13.34.24 202.49.72.50 10.10.20.10 10.28.5.21 10.28.5.28 : allow
sendmail : 192.168.10.0/255.255.255.0 202.36.163.0/255.255.255.0 202.49.72.0/255.255.255.0 202.49.73.0/255.255.255.0 202.49.74.0/255.255.255.0 202.49.75.0/255.255.255.0 10.12.0.0/255.255.0.0 10.11.200.0/255.255.255.0 10.32.0.0/255.255.0.0 10.33.0.0/255.255.0.0 10.10.0.0/255.255.0.0 10.20.4.0/255.255.255.0 10.13.0.0/255.255.0.0 : allow
sendmail : 委外spam-mail網址 : allow
sendmail : All : deny

redhat 9
sendmail要怎麼查版本?

請在 /etc/hosts.allow 裡補一個
sendmail:127.0.0.1:allow
試試,如果我沒有眼花的話,看起來好像沒有這一條件的設定。
sendmail 的版本:
$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 xxx.com.tw ESMTP Sendmail 8.14.3/8.14.3; Thu, 13 Aug 2009 20:30:09 +0800
就秀出來了。

至於為什麼 mail 可以,而 openwebmail 不可以,
不曉得是不是因為 這條規則:
sendmail : 10.15.1.0/255.255.255.0 150.87.0.0/255.255.0.0 : allow
是 mail 指令過的原因?
openwebmail 卻是要看 127.0.0.1 的條件?
剛試了一下用
一、echo test | mail bbb@yyy.com.tw
二、telnet localhost 25
250 xxx.com.tw Hello localhost [127.0.0.1], pleased to meet you
mail from: aaa@xxx.com.tw
250 2.1.0 aaa@xxx.com.tw... Sender ok
rcpt to: bbb@yyy.com.tw
250 2.1.5 bbb@yyy.com.tw... Recipient ok
data
354 Enter mail, end with "." on a line by itself
test222
.
三、pine bbb@yyy.com.tw
這三種同樣是從 主機裡寄信,
但發現 mail log 的 from 記錄內容就很不同,
那個差別是什麼?我一時也無法了解其區別。
所以只試 mail 可成,不代表另兩種是一定成。
我想,openwebmail 的連線本身 sendmail 的方式,
與 mail 指令會送到 sendmail 的方式,應是不同的。

zpple iT邦新手 3 級 ‧ 2009-08-14 12:33:01 檢舉

通了
sendmail:127.0.0.1:allow
接下來就差,要如何正確顯示中文與日文了

openwebmail通常是預設big5,如果字內容 非big5,內容就會亂碼;要看內容,就得把瀏覽器的編碼改為 像GB2312或Shift_JIS或其他對的編碼,才能看得到內容,但同時openwebmail的原來中文文字就變亂碼。OWM沒法像gmail一樣,自動判斷內容來做內容編碼的轉換。

4
ping
iT邦研究生 1 級 ‧ 2009-08-13 10:11:39

請問sendmail有設定寄件者認證嗎? (saslauthd 服務)
access是否有設定本機允許呢?

我覺得也應該往openwebmail的方向查一下相關設定是否正確
/openwebmail/etc/auth_unix.conf
passwdfile_plaintext /etc/passwd
passwdfile_encrypted /etc/shadow

/openwebmail/etc/dbm.conf
dbm_ext .db
dbmopen_ext .db
dbmopen_haslock yes

看更多先前的回應...收起先前的回應...
zpple iT邦新手 3 級 ‧ 2009-08-13 10:41:37 檢舉

/openwebmail/etc/auth_unix.conf
passwdfile_plaintext /etc/passwd
passwdfile_encrypted /etc/shadow
都ok如下

config file for auth_unix.pl

RHL 7.x/8.0/9 RHEL 2.1/3 FC 1/2/3

passwdfile_plaintext /etc/passwd
passwdfile_encrypted /etc/shadow
passwdmkdb none
check_expire no
check_nologin no
check_shell no
check_cobaltuser no
change_smbpasswd no
我可以登入openwebmail,只是寄信時出現smtp錯誤

/openwebmail/etc/dbm.conf也都有改

zpple iT邦新手 3 級 ‧ 2009-08-13 10:57:12 檢舉

請問sendmail有設定寄件者認證嗎? (saslauthd 服務)-->sendmail要怎麼查?

access是否有設定本機允許呢?
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY

/etc/mail/access 裡的 127.0.0.1 RELAY
與 /etc/hosts.allow 的 sendmail:127.0.0.1:allow
兩邊都有可能。

新版的 sendmail 的設定,開了哪些功能,通常在 /etc/mail/sendmail.cf 的最下面幾行會有把 sendmail.mc 的設定寫在上面。
若舊版的 sendmail.cf 最下面沒有寫 sendmail.mc 的內容。
如果您都是用 OS 預設的 sendmail.cf 而沒有什麼變動的話,
/etc/mail/sendmail.mc 應該就是目前 sendmail.cf 的設定來源。
不然可能看是否在 /usr/share/sendmail-cf/cf/ 曾編輯過 sendmail.mc,然後透過 m4 的指令產生新的 sendmail.cf?或者也有可能是,另外抓 sendmail 的 tarball 來編譯,而裡面的 cf 目錄才是 sendmail.mc 的所在。

更正:
/etc/mail/access 裡的 127.0.0.1 RELAY
與 /etc/hosts.allow 的 sendmail:127.0.0.1:allow
兩邊都有造成 阻擋的可能。

checo iT邦新手 4 級 ‧ 2009-09-23 17:20:17 檢舉

這個問題我剛剛發生,我知道解決之道。

如同twtw說的
在/etc/mail/access 加上 127.0.0.1 RELAY 即可 然後重新編譯一次,保證可以.

我要發表回答

立即登入回答