Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use MIME::Base64;
- use IO::Socket;
- $/="\n";
- open(F1, "conf.txt") or die "Ошибка открытия файла: $!";
- open(F2, "text.txt") or die "Ошибка открытия файла: $!";
- my $mailrcpt = <F1>;
- chomp $mailrcpt;
- #$mailrcpt=join("",$whom);
- my $subj = <F1>;
- my $attachment = <F1>;
- chomp $attachment;
- open(F3,$attachment);
- #my $attachpath = 'C:\\'; # путь к нему
- my $mailbox = '666999end@mail.ru'; # ящик-отправитель
- my $mailpwd = '6699end'; # пароль
- #my $mailrcpt = '666999end@mail.ru'; # ящик-получатель
- while($nya=<F2>){
- my $mail.=$nya;
- }
- close F1;
- close F2;
- $subj = encode_base64($subj);
- $subj =~ s/\n//ig; # уберем символы перевода строки
- $subj =~ s/\r//ig; # и возврата каретки
- $subj = '=?Windows-1251?B?'.$subj.'?=';
- $msg = encode_base64($mail);
- # здесь формируем заголовок, минимальная версия
- $body = "Mime-Version: 1.0\n";
- $body .= "Content-Type: multipart/mixed; boundary=\"my_bound\"\n\n";
- # вставляем тело письма
- $body .= "--my_bound\nContent-Type: text/plain;\n\tcharset=\"Windows-1251\"\nContent-Transfer-Encoding: base64\n\n$msg\n";
- # и прицепляем файл-вложение
- $body .= "--my_bound\nContent-Type: application/octet-stream; name=\"$attachment\"\n";#octet-stream: двоичный файл без указания формата
- $body .= "Content-Transfer-Encoding: base64\n";
- $body .= "Content-Disposition: inline; filename=\"$attachment\"\n\n";#an inline content-disposition, which means that it should be automatically displayed when the message is displayed
- # чтобы сформировать вложение, открываем файл
- # в двоичном режиме, считываем его в память и кодируем в base64
- $txt = '';
- binmode F3;
- while($str=<F3>){$txt.=$str};
- close F3;
- $body .= encode_base64($txt)."\n--my_bound--\n";
- # собираем письмо полностью
- $mailmessage = "From:$mailbox\nTo:$mailrcpt\nSubject:$subj\n$body\n.\n";
- my $reply; # код ответа сервера
- my $message; # текст ответа сервера
- #открываем сокет к SMTP-серверу
- my $socket = IO::Socket::INET->new('smtp.mail.ru:25');
- defined $socket or die "ERROR: $!\n";
- if(ReadReply() ne 220){print "Failed to establish connection = $message\n"; $socket->close(); exit} #служба готова к работе
- $socket->print ("EHLO username@mail.ru\n");
- if(ReadReply() ne 250){print "Welcome Server Error = $message\n"; $socket->close(); exit} #Запрошенное действие почтовой транзакции успешно завершилось
- else{print "Server accepts EHLO\n";}
- $socket->print("AUTH LOGIN\n");
- if(ReadReply() ne 334){print "Autification error = $message\n"; $socket->close(); exit}#waits username@mail_server
- else{print "Server accepts autif type, Server waits for username\n";}
- $socket->print(encode_base64($mailbox));
- if(ReadReply() ne 334){print "Autification error = $message\n"; $socket->close(); exit}#waits pswd
- else{print "Username was accepted, Server waits for pswd\n";}
- $socket->print(encode_base64($mailpwd));
- if(ReadReply() ne 235){print "Authorization Error = $message\n"; $socket->close(); exit}#Успешное завершение клиентом аутентификационного обмена
- else{print "235 Authentication succeeded\n";}
- $socket->print('mail from: '."$mailbox\n");
- if(ReadReply() ne 250){print "Error in the sender's mailbox = $message\n"; $socket->close(); exit}#Требуемые почтовые действия завершены
- $socket->print("rcpt to: $mailrcpt\n");
- if(ReadReply() ne 250){print "Error in the recipient's mailbox = $message\n"; $socket->close(); exit}
- $socket->print("data\n");
- if(ReadReply() ne 354){print "Error at the beginning of the formation of letters = $message\n"; $socket->close(); exit}#Начинай передачу сообщения
- $socket->print($mailmessage);
- if(ReadReply() ne 250){print "Error sending email = $message\n"; $socket->close(); exit}
- # если дошли до этого места, значит письмо ушло
- $socket->close();
- print "The letter was sent\n";
- sub ReadReply{
- $val = 1;
- while($val eq 1){
- $r = <$socket>;
- $val = $r =~ m/^\d{3}-/g;
- }
- ($reply,$message) = split(/ /,$r,2);
- return $reply;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement