Надішліть електронний лист із доданим файлом за допомогою telnet або netcat


15

Я часто використовую telnet або netcat для підключення smtp-серверів для надсилання електронного листа в якості тесту.

Хтось знає, як ви надішлете електронний лист за допомогою telnet або netcat, але додасте також файл ? Можливо, є кращі способи, але я все одно хочу знати :-)

Я був би задоволений рішенням, яке для досягнення мети використовує маленьку шкаралупу bash, але не хочу використовувати жодних інших інструментів ...


1
Ело, це, ймовірно, включає створення вкладеного файлу mime у файлі, кодування його та вставте його у своє вікно. Хоча це може бути дуже корисно мати можливість просто telnet на SMTP-сервер, написати коротку пошту та надіслати її (і я можу), надіславши такий файл просто не дуже практично. Спробуйте "sendfile" або "mutt" (навіть якщо ви не любите користуватися інструментами).
Андріоїд

Відразу після відлуння '.'; ви можете додати це відлуння '.'; сон 3; відлуння 'кинути';

Відповіді:


10

Гаразд, тому, використовуючи коментарі всіх як вихідну точку, я придумав цей дурний безлад :-) ...

{ 
    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

Хоча, оскільки я просто надсилаю випадкові дані, не впевнений, чи залишилися ці недоторканими…
Кайл Брандт

У вас більша толерантність до тидію, ніж я! > усмішка <
Еван Андерсон

Як я можу змінити це, щоб надіслати певний текстовий файл?
користувач987654321

8

Ick. Вам доведеться базувати вкладення base64 та створити заголовки MIME.

Замість того, щоб щоразу створювати нове повідомлення "на льоту", напевно, було б простіше просто надіслати електронною поштою дуже короткий приклад повідомлення від "реальної" програми електронної пошти (використовуючи роботу, яку люди, які її написали, робили, щоб поставити вкладення в правильне кодування та створення заголовків MIME).

Збережіть це повідомлення у текстовому файлі з його заголовками (звичайно, видаляючи заголовок транспорту) та просто модифікуйте / скопіюйте / вставте його в telnet або netcat для майбутніх сесій.


6

Хоча вручну тестувати SMTP-сервери вручну можливо і життєздатно, використання інструменту, призначеного для цього, буде набагато простіше.

Ця стаття пояснює SWAKS . swaks призначений для тестування smtp-сервера. Підтримує вкладення, аутентифікацію та шифрування!


+1 Тепер це те, що я збираюся почати використовувати! :-)
Кайл Брандт

4

Я підбив підсумки цього запису, поки шукав щось те саме. і з тендерів тут і деяких додаткових досліджень мені вдалося зробити цей сценарій.

#!/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

Одне, що ви можете додати, - це автентифікація. мені це не потрібно, тому я не додав його.

Я думаю, що для цього потрібні лише md5sum , netcat , file , awk та base64 команди, я думаю, вони досить стандартні у більшості систем.


Чи можна було б легко додати до цього рішення кілька вкладених файлів?
TryTryAgain

3

Це те, що я роблю, щоб надсилати електронну пошту з bash. Я використовую його для надсилання файлу журналу та зовнішньої адреси IP, сміливо використовуйте його:

#!/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

Сподіваюся, вам це було добре;)

псирак.


3

Telnet - надсилайте електронну пошту з кількома вкладеннями

котяча прихильність.zip | base64> zip.txt
кішка вкладення.pdf | base64> pdf.txt

# Тип вмісту: текст / csv; name = "$ FILE" # для файлів CSV
# Тип вмісту: application / x-msdownload; name = "$ FILE" # для виконуваного файлу
# Тип вмісту: текст / xml; name = "$ FILE" # для файлів xml або спробуйте застосувати / xml

telnet smtp.server.dom 25

ХЕЛО
ПОЧТА З: email@server.com
RCPT TO: email@server.com
ДАНІ
Тема: Тестовий електронний лист
Від: email@server.com
На електронну пошту@server.com
MIME-версія: 1.0
Тип вмісту: багаточастинний / змішаний; межа = "X - = - = - = - межа тексту"

--X - = - = - = - межа тексту
Тип вмісту: текст / звичайний

Розмістіть своє повідомлення тут ...

--X - = - = - = - межа тексту
Тип вмісту: додаток / zip; name = "file.zip"
Передача вмісту-кодування: base64
Зміст-диспозиція: вкладення; filename = "file.zip"

UEsDBBQAAAAIAG1 + zEoQa .... скопіювати / вставити zip.txt

--X - = - = - = - межа тексту
Тип вмісту: текст / pdf; name = "file.pdf"
Передача вмісту-кодування: base64
Зміст-диспозиція: вкладення; filename = "file.pdf"

UEsDBBQAAAAAG1 + zEoQa .... скопіювати / вставити pdf.txt

--X - = - = - = - межа тексту
.

ВІДКРИТИ

1
Ласкаво просимо на сервер за замовчуванням. Люди, які публікують відповіді, як і ваша, дійсно вітаються на цьому веб-сайті! :) gratz
bgtvfr

1

Вам потрібно переглянути специфікацію протоколу SMTP. Це дивовижне світло, прочитане для технічних характеристик, і допоможе вам зрозуміти, як працює процес електронної пошти.

Зокрема, зрозумійте, що вкладення перетворюються на типи MIME та кодуються у тексті, тому будь-які вкладення, які ви хочете надіслати через telnet, повинні бути перетворені в текст та передані як такі через протокол telnet.


1

Якщо все, що ви тестуєте, "зробив вкладення", можливо, ви можете піти з використання стандартного вкладеного файлу перед MIME: uuencode. На відміну від MIME, створювати повідомлення набагато простіше. На відміну від MIME, він не потребує заголовків. Однак, не всі поштові клієнти більше не розпізнають файли, кодовані uuencoded, тому я пропоную тестувати, щоб побачити, чи можете ви їх використовувати. Якщо це так, ви просто заощадили багато зусиль. Якщо це не так, то попередньо сконструювати ваше MIMEed повідомлення через perl або щось подібне та пропустити його через щось на зразок NetCat - це, мабуть, шлях.

Варто подивитися.


20 років тому це було гарною відповіддю. Не зараз. Скористайтеся однією з багатьох бібліотек MIME та створіть електронну пошту, сумісну з MIME, разом із кодуванням Base64.
james.garriss

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.