Gửi email với một tệp đính kèm bằng telnet hoặc netcat


15

Tôi thường sử dụng telnet hoặc netcat để kết nối các máy chủ smtp để gửi email dưới dạng thử nghiệm.

Có ai biết làm thế nào bạn sẽ gửi email bằng telnet hoặc netcat nhưng cũng đính kèm một tệp không? Có lẽ có nhiều cách tốt hơn, nhưng tôi vẫn muốn biết :-)

Tôi sẽ rất vui với giải pháp sử dụng một ít bash shell để hoàn thành mục tiêu, nhưng không muốn sử dụng bất kỳ công cụ nào khác ...


1
ehlo, điều này có thể sẽ bao gồm việc tạo một tệp đính kèm mime trong một tệp, mã hóa nó và sau đó dán nó vào cửa sổ của bạn. Mặc dù có thể rất hữu ích khi có thể chỉ telnet đến máy chủ SMTP, viết một thư ngắn và gửi nó (và tôi có thể), gửi một tệp như thế không thực tế lắm. Hãy thử 'sendfile' hoặc 'mutt' (ngay cả khi bạn không muốn sử dụng các công cụ).
Andrioid

Ngay sau tiếng vang '.'; bạn có thể muốn thêm tiếng vang này '.'; ngủ 3; tiếng vang 'bỏ';

Câu trả lời:


10

Được rồi, vì vậy sử dụng ý kiến ​​của mọi người làm điểm khởi đầu tôi đã nghĩ ra mớ hỗn độn ngớ ngẩn này :-) ...

{ 
    sleep 5; 
    echo 'ehlo';
    sleep 3;
    echo 'MAIL FROM:<Test@test.com>';
    sleep 3; 
    echo 'RCPT TO: <kyle@test_dest.com>';
    sleep 3;
    echo 'DATA';
    sleep 3;
    echo -e 'To:kyle@testdest.com\nMIME-Version: 1.0 (mime-construct 1.9)\nContent-Type: application/zip\nContent-Transfer-Encoding: base64\n\n';
    dd if=/dev/urandom bs=4 count=10 2>/dev/null | openssl base64;
    echo '.';
} | telnet mx1.testdest.com 25

Mặc dù vì tôi chỉ gửi dữ liệu ngẫu nhiên, không chắc dữ liệu có còn nguyên vẹn không ...
Kyle Brandt

Bạn có sức chịu đựng cao hơn cho tedium hơn tôi! > cười <
Evan Anderson

Làm thế nào tôi có thể thay đổi điều này để gửi một tệp văn bản cụ thể?
dùng987654321

8

Ick. Bạn sẽ phải mã hóa 64 tệp đính kèm và tạo các tiêu đề MIME.

Thay vì tạo một tin nhắn mới "nhanh chóng" mỗi lần, có thể dễ dàng hơn chỉ cần gửi email cho mình một tin nhắn ví dụ rất ngắn từ một chương trình email "thực" (tận dụng công việc mà những người đã viết nó đã làm để đính kèm vào mã hóa thích hợp và tạo các tiêu đề MIME).

Lưu tin nhắn đó vào một tệp văn bản với các tiêu đề của nó (tất nhiên là loại bỏ tiêu đề truyền tải) và chỉ cần sửa đổi / sao chép / dán nó vào telnet hoặc netcat cho các phiên trong tương lai.


6

Mặc dù kiểm tra bằng tay các máy chủ SMTP bằng tay là có thể và khả thi, sử dụng một công cụ được thiết kế cho việc này sẽ dễ dàng hơn nhiều.

Bài viết này giải thích SWAKS . swaks được thiết kế để thử nghiệm máy chủ smtp. Hỗ trợ tệp đính kèm, xác thực và mã hóa!


+1 Bây giờ đó là thứ tôi sẽ bắt đầu sử dụng! :-)
Kyle Brandt

4

tôi đã tổng hợp theo mục này trong khi tôi đang tìm kiếm một cái gì đó tương tự. và từ những điều tồi tệ ở đây và một số nghiên cứu bổ sung tôi đã quản lý để thực hiện kịch bản này.

#!/bin/sh

# Default reception
TOEMAIL="myEmail@domain.ltd";
# Default Subject
SUBJECT="You got mail - $DATE";
# Default Contents
MSGBODY="Hello, this is the default message body";
# Default Attachment
#ATTACHMENT="/tmp/testoutput"
# Default smtp server
mailserver="smtp.server.ltd"
mailserverPort="25"

showUsage() {
        echo "$0 -a /file/to/attach [-m /message/file] [-M \"Message string\"] -s \"subject\" -r receiver@domain.com"
        echo
        echo "The attachment (-a) is required, if no attachment is used then rather use sendmail directly."
}

fappend() {
    echo "$2">>$1;
}
DATE=`date`

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# This might need correction to work on more places, this is tested at a ubuntu 13.10 machine.  #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
domain=`grep search /etc/resolv.conf | awk '{print $2;}'`
computer=`hostname`
user=`whoami`
FREMAIL="$user@$computer.$domain"

while getopts "M:m:a:s:r:" opt; do
  case $opt in
        s)
          SUBJECT="$OPTARG - $DATE"
          ;;
        r)
          TOEMAIL="$OPTARG"
          ;;
        m)
          MSGBODY=`cat $OPTARG`
          ;;
        M)
          MSGBODY="$OPTARG"
          ;;
        a)
          ATTACHMENT="$OPTARG"
          ;;
        :)
          showUsage
          ;;
        \?)
          showUsage
          ;;
  esac
done

if [ "$ATTACHMENT" = "" ]; then
        showUsage
        exit 1
fi

MIMETYPE=`file --mime-type -b $ATTACHMENT`
TMP="/tmp/tmpmail_"`date +%N`;
BOUNDARY=`date +%s|md5sum|awk '{print $1;}'`
FILENAME=`basename $ATTACHMENT`

DATA=`cat $ATTACHMENT|base64`

rm $TMP 2> /dev/null

fappend $TMP "EHLO $computer.$domain"
fappend $TMP "MAIL FROM:<$FREMAIL>"
fappend $TMP "RCPT TO:<$TOEMAIL>"
fappend $TMP "DATA"
fappend $TMP "From: $FREMAIL"
fappend $TMP "To: $TOEMAIL"
fappend $TMP "Reply-To: $FREMAIL"
fappend $TMP "Subject: $SUBJECT"
fappend $TMP "Content-Type: multipart/mixed; boundary=\"$BOUNDARY\""
fappend $TMP ""
fappend $TMP "This is a MIME formatted message.  If you see this text it means that your"
fappend $TMP "email software does not support MIME formatted messages."
fappend $TMP ""
fappend $TMP "--$BOUNDARY"
fappend $TMP "Content-Type: text/plain; charset=UTF-8; format=flowed"
fappend $TMP "Content-Disposition: inline"
fappend $TMP ""
fappend $TMP "$MSGBODY"
fappend $TMP ""
fappend $TMP ""
fappend $TMP "--$BOUNDARY"
fappend $TMP "Content-Type: $MIMETYPE; name=\"$FILENAME\""
fappend $TMP "Content-Transfer-Encoding: base64"
fappend $TMP "Content-Disposition: attachment; filename=\"$FILENAME\";"
fappend $TMP ""
fappend $TMP "$DATA"
fappend $TMP ""
fappend $TMP ""
fappend $TMP "--$BOUNDARY--"
fappend $TMP ""
fappend $TMP "."
fappend $TMP "quit"

netcat $mailserver $mailserverPort < $TMP >> $TMP
rc="$?"
if [ "$rc" -ne "0" ]; then
    echo "Returncode: $rc"
    echo "Please inspect $TMP"
else
    rm $TMP;
fi

Một điều bạn có thể muốn thêm là xác thực. Tôi không cần nó vì vậy tôi chưa thêm nó.

Tôi nghĩ rằng nó chỉ yêu cầu md5sum , netcat , file , awk và các lệnh base64 , id đoán chúng là tiêu chuẩn khá trong hầu hết các hệ thống.


Giải pháp này có thể dễ dàng thêm nhiều tệp đính kèm không?
TryTryAgain

3

Đây là những gì tôi đang làm để gửi email với bash. Tôi sử dụng nó để gửi cho tôi một tệp nhật ký và địa chỉ IP bên ngoài, vui lòng sử dụng nó:

#!/bin/bash
# Send email from bash with attachment
# by Psirac - www.subk.org
from=myfromadress@test.com
to=mytoadress@test.com
mailserver=smtp.test.com
mylogin=`echo 'MYUSERNAME' | openssl base64`
mypassword=`echo 'MYPASSWORD' | openssl base64`
myip=`wget -qO- icanhazip.com`
myfile=`cat /tmp/mytest.log | openssl base64`
mydate=`date`

exec 9<>/dev/tcp/$mailserver/25
echo "HELO routeur.tripfiller" >&9
read -r temp <&9
#echo "$temp"
echo "auth login" >&9
read -r temp <&9
#echo "$temp"
echo "$mylogin=" >&9
read -r temp <&9
#echo "$temp"
echo "$mypasswd=" >&9
read -r temp <&9
#echo "$temp"
echo "Mail From: $from" >&9
read -r temp <&9
#echo "$temp"
echo "Rcpt To: $to" >&9
read -r temp <&9
#echo "$temp"
echo "Data" >&9
read -r temp <&9
#echo "$temp"
echo "To:$to" >&9
echo "MIME-Version: 1.0" >&9
echo "Subject: Test mail sended at $mydate" >&9
echo "From: $from" >&9
echo "To: $to" >&9
echo "Content-Type: multipart/mixed; boundary=sep" >&9
echo "--sep" >&9
echo "Content-Type: text/plain; charset=UTF-8" >&9
echo "Here your text..." >&9
echo "External IP adress: $myip" >&9
echo "--sep" >&9
echo "Content--Type: text/x-log; name=\"mytest.log\"" >&9
echo "Content-Disposition: attachment; filename=\"mytest.log\"" >&9
echo "Content-Transfer-Encoding: base64" >&9
echo "" >&9
echo "$myfile" >&9
echo "--sep--" >&9
echo "." >&9
read -r temp <&9
echo "$temp"
echo "quit" >&9
read -r temp <&9
echo "$temp"
9>&-
9<&-
#echo "All Done. See above for errors"
exit 0

Hy vọng nó tốt cho bạn;)

psirac.


3

Telnet - gửi email với nhiều tệp đính kèm

tập tin đính kèm mèo.zip | cơ sở64> zip.txt
tập tin đính kèm mèo.pdf | cơ sở64> pdf.txt

# Loại nội dung: văn bản / csv; name = "$ FILE" # cho các tệp CSV
# Loại nội dung: application / x-msd Download; name = "$ FILE" # để thực thi
# Loại nội dung: văn bản / xml; name = "$ FILE" # cho các tệp xml hoặc thử ứng dụng / xml

telnet smtp.server.dom 25

XIN CHÀO
MAIL TỪ: email@server.com
RCPT ĐẾN: email@server.com
DỮ LIỆU
Chủ đề: Email kiểm tra
Từ: email@server.com
Tới: email@server.com
Phiên bản MIME: 1.0
Loại nội dung: nhiều phần / hỗn hợp; ranh giới = "X - = - = - = - ranh giới văn bản"

--X - = - = - = - ranh giới văn bản
Loại nội dung: văn bản / đơn giản

Đặt tin nhắn của bạn ở đây ...

--X - = - = - = - ranh giới văn bản
Loại nội dung: ứng dụng / zip; tên = "file.zip"
Chuyển nội dung-Mã hóa: cơ sở64
Nội dung-Bố trí: đính kèm; tên tệp = "file.zip"

UEsDBBQAAAAIAG1 + zEoQa .... sao chép / dán zip.txt

--X - = - = - = - ranh giới văn bản
Loại nội dung: văn bản / pdf; tên = "file.pdf"
Chuyển nội dung-Mã hóa: cơ sở64
Nội dung-Bố trí: đính kèm; tên tệp = "file.pdf"

UEsDBBQAAAAIAG1 + zEoQa .... sao chép / dán pdf.txt

--X - = - = - = - ranh giới văn bản
.

QUIT

1
Chào mừng bạn đến với serverfault. Những người đăng câu trả lời như của bạn thực sự được chào đón trên trang web này! :) gratz
bgtvfr

1

Bạn sẽ cần xem lại đặc tả giao thức SMTP. Đây là một cách đọc đáng ngạc nhiên về thông số kỹ thuật và sẽ giúp bạn hiểu quy trình email hoạt động như thế nào.

Cụ thể, nhận ra rằng các tệp đính kèm được chuyển đổi thành các loại MIME và được mã hóa thành văn bản, do đó, bất kỳ tệp đính kèm nào bạn muốn gửi qua telnet sẽ phải được chuyển đổi thành văn bản và được truyền qua giao thức telnet.


1

Nếu tất cả những gì bạn đang kiểm tra là 'đã phân phối tệp đính kèm', bạn có thể thoát khỏi việc sử dụng tiêu chuẩn đính kèm trước MIME: uuencode. Không giống như MIME, việc tạo tin nhắn đơn giản hơn rất nhiều. Không giống như MIME, nó không yêu cầu bất kỳ tiêu đề nào. Tuy nhiên, không phải tất cả các ứng dụng thư nhận ra các tệp uuencoding là tệp đính kèm nữa nên tôi khuyên bạn nên thử nghiệm xem bạn có thể sử dụng tệp đó không. Nếu vậy, bạn vừa tiết kiệm cho mình rất nhiều nỗ lực. Nếu không, thì việc xây dựng trước tin nhắn MIME của bạn thông qua perl hoặc một cái gì đó và chuyển nó qua một cái gì đó như NetCat có lẽ là cách để đi.

Đáng xem.


20 năm trước đây là một câu trả lời tốt. Không phải bây giờ. Sử dụng một trong nhiều thư viện MIME và tạo email tuân thủ MIME, hoàn thành với mã hóa Base64.
james.garriss

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.