Программа отправки электронной почты в Python
Sendmail из командной строки с помощью Python
Бывают случаи, когда нужно отправить какой-нибудь текстовый файл, например, python-скрипт Bash Script или Power Shell скрипт из командной строки себе или своим коллегам, используя командную строку. Конечно, если вы работаете в Linux, вы можете воспользоваться утилитой sendmail или командой mail, однако и та, и другая имеют некоторые ограничения в плане того, к какому почтовому серверу они могут подключиться или от/к пользователю они могут это сделать.
Я написал небольшой скрипт на языке python для использования в операционных системах Linux/Windows/Mac, который может прочитать любой файл и отправить его непосредственно на указанный адрес электронной почты, использование будет выглядеть следующим образом:
Usage: ./sendmail_insecure.py -f <File> -r <Recepient_Eamil> -s "Subject"
Пример использования – если вы хотите отправить один и тот же скрипт sendmail_insecure.py
$./sendmail_insecure.py -f myfile.txt -r test@test.com -s "Test Eamil"
Перед запуском скрипта необходимо обновить 2 основные переменные
smtp_server = "yourmailserver.yourdomain.com"
sender_email = "sender_email@yourdomain.com"
Скрипт использует неаутентифицированные серверы, обычно находящиеся в пределах вашей компании или страны, которые доверяют вашему IP-адресу. Поэтому он называется небезопасным, поскольку не происходит TLS-коммуникации.
Полный текст скрипта приведен ниже:
import smtplib
import getopt
import sys
smtp_port = 25
smtp_server = "yourmailserver.yourdomain.com"
sender_email = "youremailaddress@yourdomain.com"
def usage():
print("Usage: ./sendmail_insecure.py -f <File> -r <Recepient_Eamil> -s \"Subject\" \n")
if ( len(sys.argv[1:]) != 6):
usage()
sys.exit(2)
try:
opts,args = getopt.getopt(sys.argv[1:],"f:s:r:",["File","Subject","Recepient"])
except:
usage()
exit(1)
for opt,arg in opts:
if (opt == "-f"):
file = arg
elif (opt == "-s"):
subject = arg
elif (opt == "-r"):
receiver_email = arg
else:
print("Invalid Usage")
try:
messagefile = open(file,"r")
except:
print("Unable to Open Files: <",file,">")
sys.exit(2)
message = "Subject: " + subject + "\n" + messagefile.read()
try:
with smtplib.SMTP(smtp_server,smtp_port) as server:
server.sendmail(sender_email,receiver_email,message)
print("Mail sent!")
messagefile.close()
exit(0)
except smtplib.SMTPResponseException as e:
print("Unable to Connect to Stmp Server")
#print(e.smtp_error) ## Enable for Dubugging
#print(e.smtp_code) ## Enable for Dubugging
sys.exit(3)
messagefile.close()
Наслаждайтесь 🙂