2012-04-03 41 views
7

Tôi có postfix + dovecot. Tôi muốn làm cho kịch bản bash có thể sử dụng SMTP cho việc này. Tôi không muốn sử dụng sendmail.Có thể gửi thư bằng bash script qua smtp không?

Có thể không? Có thể ai đó có một số ví dụ về mã không?

+4

Tại sao bạn không muốn sử dụng ứng dụng khách SMTP? – Kimvais

+2

Có gì sai với wrapper 'sendmail' postfix? – 0xC0000022L

+0

https://unix.stackexchange.com/questions/36982/can-i-set-up-system-mail-to-use-an-external-smtp-server có thể trả lời câu hỏi của bạn. Ssmtp. –

Trả lời

2

Bạn muốn bash để nói chuyện trực tiếp với máy chủ SMTP? Điều đó không thực sự xảy ra. Có thể về mặt kỹ thuật có thể sử dụng hỗ trợ cho truyền thông mạng có sẵn trong bash, nhưng thực tế bạn không muốn đi xuống đường dẫn đó.

Điều đó có nghĩa rằng những gì bạn thực sự cần là gọi một chương trình bên ngoài sẽ lấy SMTP cho bạn. Thông thường, đó sẽ là sendmail, nhưng nếu bạn đang cố gắng để tránh điều đó có rất nhiều lựa chọn thay thế khác, bao gồm:

Cả hai có thể xử lý thông tin liên lạc với một máy chủ SMTP từ xa mà không liên quan đến sendmail.

12

Cậu bé, khi găng tay được ném ra, nó luôn luôn bash es tôi phải lộn ngược đầu! :-)

#!/bin/sh 

function checkStatus { 
    expect=250 
    if [ $# -eq 3 ] ; then 
    expect="${3}" 
    fi 
    if [ $1 -ne $expect ] ; then 
    echo "Error: ${2}" 
    exit 
    fi 
} 

MyHost=`hostname` 

read -p "Enter your mail host: " MailHost 
MailPort=25 

read -p "From: " FromAddr 

read -p "To: " ToAddr 

read -p "Subject: " Subject 

read -p "Message: " Message 

exec 3<>/dev/tcp/${MailHost}/${MailPort} 

read -u 3 sts line 
checkStatus "${sts}" "${line}" 220 

echo "HELO ${MyHost}" >&3 

read -u 3 sts line 
checkStatus "$sts" "$line" 

echo "MAIL FROM: ${FromAddr}" >&3 

read -u 3 sts line 
checkStatus "$sts" "$line" 

echo "RCPT TO: ${ToAddr}" >&3 

read -u 3 sts line 
checkStatus "$sts" "$line" 

echo "DATA" >&3 

read -u 3 sts line 
checkStatus "$sts" "$line" 354 

echo "Subject: ${Subject}" >&3 
echo "${Message}" >&3 
echo "." >&3 

read -u 3 sts line 
checkStatus "$sts" "$line" 
+0

Điều này có vẻ như tôi tìm kiếm. Cảm ơn. – Jason

+0

vui vì tôi có thể chứng minh điều này cho bạn! – dldnh

6

Đã kiểm tra bằng gmail và nó hiện đang hoạt động.

#!/bin/bash 
# Use "host -t mx yourispdomain" to find out yourispmailserver 
exec 1<>/dev/tcp/yourispmailserver/25 
a=$(cat <<"MAILEND" 
HELO local.domain.name 
MAIL FROM: <[email protected]> 
RCPT TO: <[email protected]> 
DATA 
From: [email protected] 
To: [email protected] 
Subject: test 
send your orders for pizza to the administrator. 
. 
QUIT 
. 
MAILEND 
) 
IFS=' 
' 
declare -a b=($a) 
for x in "${b[@]}" 
do 
    echo $x 
    sleep 1 
done 
1

Không rõ ràng khi bạn nói rằng bạn không muốn sử dụng sendmail. Có thể bạn không muốn sử dụng quy trình gửi thư.

Postfix có tệp thực thi được gọi là "sendmail" và có thể bạn muốn sử dụng nó vì tôi không thể nghĩ tại sao bạn không nên sử dụng.

#/bin/bash 

FROM='[email protected]' 
TO='[email protected]' 
SUBJECT='This is a test message' 

BODY="This is a test mail message body. 
Hi there. 
" 

printf "From: <%s>\nTo: <%s>\nSubject: %s\n\n%s" "$FROM" "$TO" "$SUBJECT" "$BODY" | sendmail -f "$FROM" 
+0

Tôi đồng ý, có thể tôi không nói rõ ràng. Tôi có nghĩa là, mà tôi muốn biết về khả năng kịch bản bash để sử dụng autt smtp để kết nối với máy chủ SMTP từ xa và gửi thư. – Jason

1

Bạn có thể sử dụng SSMTP. Có lẽ một điều này giúp quá:

http://tecadmin.net/send-email-smtp-server-linux-command-line-ssmtp/

+1

SSMTP cũng được phép gửi email qua máy chủ SMTP. Có tùy chọn anohter để sử dụng lệnh sendEmail. https://tecadmin.net/send-email-from-gmail-smtp-via-linux-command/ hoặc https://tecadmin.net/ways-to-send-email-from-linux -dòng lệnh/ –

2

Vừa thấy nhỏ nhưng tuyệt vời tiện ích này sendemail (không sendmail). Cú pháp quá đơn giản để giải thích.

Ví dụ:

thông tin
SERVER="smtp.company.com" 
FROM="[email protected]" 
TO="[email protected]" 
SUBJ="Some subject" 
MESSAGE="Some message" 
CHARSET="utf-8" 

sendemail -f $FROM -t $TO -u $SUBJ -s $SERVER -m $MESSAGE -v -o message-charset=$CHARSET 

More sẵn thông qua sự giúp đỡ hoặc tại trang web của tác giả: http://caspian.dotconf.net/menu/Software/SendEmail/.

0
  • Install ssmtp, ví dụ:

    apt-get install ssmtp

  • Configure ssmtp:

    sudo nano /etc/ssmtp/ssmtp.conf

    · Server: mailhub=smtp.1und1.de:587

    · Hostname: hostname=subdomain.domain.com

    · User: [email protected]

    · Pass: AuthPass=your_password

Sau đó trong file sh của bạn, làm những gì bạn cần và ống nó để mail, ví dụ:

#!/bin/bash du -sh | mail -s "Disk usage report" [email protected]

HOẶC

#!/bin/bash echo "Today's DB backup is ok." | mail -s "DB daily backup alert" [email protected]

Các vấn đề liên quan