Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import argparse
- import datetime
- import os
- import socket
- import base64
- import ssl
- import sys
- DEFAULT_SENDER = "seti2seti"
- DEFAULT_SUBJECT = "Images"
- DEFAULT_PORT = 465
- IMAGE_EXPANSION = ['gif', 'pjpeg', 'png', 'jpeg', 'bmp']
- SEPARATOR = b"12332145665478987"
- def connect(sock, serv_addr, serv_port):
- try:
- sock.settimeout(2)
- sock.connect((serv_addr, serv_port))
- answer = sock.recv(1024)
- return answer
- except socket.error:
- print("Failed connect to server")
- sys.exit(1)
- def change_data(sock, b_msg):
- send_data(sock, b_msg)
- return get_data(sock)
- def get_data(sock):
- try:
- sock.settimeout(3)
- answer = sock.recv(1024)
- if str(answer)[2] == str(5):
- print(str(answer)[5:-1])
- sys.exit(1)
- return answer
- except socket.error:
- print("Failed get some data")
- sys.exit(1)
- def send_data(sock, b_msg):
- sock.send(b_msg)
- def auth(sock, login, password):
- auther = change_data(sock, b"auth login\r\n")
- print(b"auth login\r\n")
- print(auther)
- login = change_data(sock, base64.b64encode(login) + b'\r\n')
- print(base64.b64encode(login) + b'\r\n')
- print(login)
- pass_ = change_data(sock, base64.b64encode(password) + b'\r\n')
- print(base64.b64encode(password) + b'\r\n')
- print(pass_)
- def header(sock, b_mail_from, b_mail_to):
- hello_data = get_data(sock)
- print(hello_data)
- ehlo_answer = change_data(sock, b"EHLO I\r\n")
- print(b"EHLO I\r\n")
- print(ehlo_answer)
- login = bytes("seti2seti@mail.ru", encoding='windows-1251')
- passwd = bytes("Dnitiufk1995", encoding='windows-1251')
- auth(sock, login, passwd)
- mailfrom_answer = change_data(sock, b"MAIL FROM: <" + b_mail_from + b">\r\n")
- print(b"MAIL FROM: <" + b_mail_from + b">\r\n")
- print(mailfrom_answer)
- rcptto_answer = change_data(sock, b"RCPT TO: <" + b_mail_to + b">\r\n")
- print(b"RCPT TO: <" + b_mail_to + b">\r\n")
- print(rcptto_answer)
- data_answer = change_data(sock, b"DATA\r\n")
- print(b"DATA\r\n")
- print(data_answer)
- # quit_answer = change_data(sock, b"QUIT\r\n")
- # print(quit_answer)
- def create_base64image(name_file):
- with open(name_file, 'rb') as f:
- b_content_file = base64.b64encode(f.read())
- return_str = list(str(b_content_file)[2:-1])
- count = len(return_str) / 70
- for i in range(1, int(count) + 1):
- return_str.insert(i*70, '\n')
- return bytes("".join(return_str), encoding="utf-8")
- def send_image(expansion, file, data_images):
- expansion = bytes(expansion, encoding="utf-8")
- name_file = bytes(file, encoding="utf-8")
- data_images += b"--" + SEPARATOR + b"\r\n" + \
- b"Content-Type: image/" + expansion + b"\r\n" + \
- b"Content-Transfer-Encoding: base64\r\n" + \
- b"Content-Disposition:attachment;filename=" + name_file + b"\n" + \
- b"Content-Id: attachedImage\r\n\r\n" + \
- create_base64image(name_file) + b'\r\n\r\n'
- return data_images
- def send_images(directory=None):
- if not directory:
- directory = os.getcwd()
- files = os.listdir(directory)
- for file in files:
- expansion = (file.split('.'))[-1]
- if expansion in IMAGE_EXPANSION:
- data_images += add_image(expansion, file, data_images)
- data_images = b"hello"
- def body(sock, b_sender, b_receiver, b_subject, b_date, directory=None):
- # data_images = b""
- # path = ""
- # if not directory:
- # path = os.getcwd()
- # files = os.listdir(path)
- # for file in files:
- # expansion = (file.split('.'))[-1]
- # if expansion in IMAGE_EXPANSION:
- # data_images += add_image(expansion, file, data_images)
- # data_images = b"hello"
- print(b"From: " + b_sender + b"\r\n")
- send_data(sock, b"From: " + b_sender + b"\r\n")
- send_data(sock, b"To: " + b_receiver + b"\r\n")
- send_data(sock, b"Subject: " + b_subject + b"\r\n")
- send_data(sock, b"Date: " + b_date + b"\r\n")
- send_data(sock, b"Content-Type: multipart/mixed; boundary=" + SEPARATOR + b"\r\n")
- send_data(sock, b"\r\n")
- answer = change_data(sock, b".\r\n")
- print(answer)
- # data = b"From: " + b_sender + b"\r\n" +\
- # b"To: " + b_receiver + b"\r\n" +\
- # b"Subject: " + b_subject + b"\r\n" +\
- # b"Date: " + b_date + b"\r\n" +\
- # b"Content-Type: multipart/mixed; boundary=" + SEPARATOR + b"\r\n\r\n"
- # print(data + data_images + b"--" + SEPARATOR + b"--\r\n\r\n" + b".")
- # body_answer = get_data(sock, data + data_images + b"--" + SEPARATOR + b"--\r\n\r\n" + b".\r\n")
- # print(body_answer)
- def write_letter(serv_addr, serv_port, b_mail_from, b_mail_to, b_sender, b_receiver, b_subject, directory=None):
- date = datetime.datetime.now()
- date = str(date.year) + "-" + str(date.month) + '-' + str(date.day)
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- # conn_answer = connect(sock, serv_addr, serv_port)
- ssl_sock = ssl.wrap_socket(sock)
- ssl_sock.connect((serv_addr, serv_port))
- header(ssl_sock, b_mail_from, b_mail_to)
- body(ssl_sock, b_sender, b_receiver, b_subject, bytes(date, encoding="utf-8"), directory=None)
- def main(to_mail, addr_serv, name_directory=None):
- from_mail = DEFAULT_SENDER + "@mail.ru"
- sender = '=?utf-8?B?' + str(base64.b64encode(bytes(DEFAULT_SENDER, encoding='windows-1251')))[2:-1] + \
- '?= <' + from_mail + '>'
- subject = '=?utf-8?B?' + str(base64.b64encode(bytes(DEFAULT_SUBJECT, encoding='windows-1251')))[2:-1] + '?='
- receiver = '=?utf-8?B?' + str(base64.b64encode(bytes(to_mail, encoding='windows-1251')))[2:-1] + \
- '?= <' + to_mail + '>'
- write_letter(addr_serv, DEFAULT_PORT,
- bytes(from_mail, encoding="utf-8"),
- bytes(to_mail, encoding="utf-8"),
- bytes(sender, encoding="utf-8"),
- bytes(receiver, encoding="utf-8"),
- bytes(subject, encoding="utf-8"),
- name_directory)
- def get_args():
- parser = argparse.ArgumentParser(description="SMTP-MIME")
- parser.add_argument("email", nargs="?", default="seti2seti@rambler.ru", help="receiver's email")
- parser.add_argument("addr_serv", nargs="?", default="smtp.mail.ru", help="server's address")
- parser.add_argument("user", nargs="?", help="user's name")
- parser.add_argument("pass", nargs="?", help="user's password")
- args = parser.parse_args()
- return args
- if __name__ == "__main__":
- args = get_args()
- main(args.email, args.addr_serv)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement