Подскажите как отправить письмо из скрипта

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
mouze47
рядовой
Сообщения: 36
Зарегистрирован: 2007-12-07 10:10:28

Подскажите как отправить письмо из скрипта

Непрочитанное сообщение mouze47 » 2009-09-08 17:11:15

Установлен exim+mysql.
Подскажите как отправить письмо из скрипта
У меня ссылка c exim на sendmail
sendmail -t user
Пишет не файла /etc/exim/exim.conf
У меня есть конфигурационный файл configure, пытаюсь его подсунуть
ругается что не знает большенство опций.
Подскажите что не так.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение buryanov » 2009-09-09 0:38:49

В этой статье описан процесс установки. У вас сперва должен запустится почтовый сервер.
Затем можно добавить такую строку в ваш скрипт:

Код: Выделить всё

echo 'test'|mail user@domen.ru
и письмо уйдёт.
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение zingel » 2009-09-09 5:17:21

не факт что уйдёт потому, что алиас с mail может стоять в /bin/false, посему запускать непосредственно сам exim с пайпом
Z301171463546 - можно пожертвовать мне денег

mouze47
рядовой
Сообщения: 36
Зарегистрирован: 2007-12-07 10:10:28

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение mouze47 » 2009-09-09 8:39:10

Извините я наверное не полностью сообщил информацию.
У меня установлен Debian4.
На нем настроен работающий exim+sql+dovecot+fetchmail. Он полностью рабочий, письма отправляются и принимаются по ssl.
Я хочу с этого сервера отправить из командной строки письмо.
У меня ссылка c exim на sendmail
sendmail -t user
Пишет не файла /etc/exim/exim.conf
У меня есть конфигурационный файл configure, пытаюсь его подсунуть
ругается что не знает большенство опций.
команды mail нет.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение ProFTP » 2009-09-09 9:59:55

Код: Выделить всё

#!/usr/bin/perl 

 open (SENDMAIL, "|/usr/local/sbin/sendmail -t")
     or die "sendmail not ready";
 print SENDMAIL "From: John Doe <i\@x0.org.ua\n";
 print SENDMAIL "To: Frank Smith <rtyug\@ukr.net>\n";
 print SENDMAIL "Reply-To: Frank Smith <rtyug\@ukr.net>\n";
 print SENDMAIL "Subject: Test.\n\n";
 print SENDMAIL "It`s just test!!!";
 close (SENDMAIL) or warn "sendmail didn`t close nicely";
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

mouze47
рядовой
Сообщения: 36
Зарегистрирован: 2007-12-07 10:10:28

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение mouze47 » 2009-09-09 10:22:52

Не получается. Скрипт выполняется, но ни какого сообщения не появляется. Письмо не приходит. В логах тоже пусто.

Гость
проходил мимо

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение Гость » 2009-09-09 22:16:07

Код: Выделить всё

<?php
.....................
$command = "/usr/bin/sendEmail -f \"office.company.ru <office@company.ru>\" ".
                "-t \"$user <$mail>\" -u \"С Днем Рождения!\" -s smtp.company.ru " .
                "-m \"$text\" -o message-charset=utf-8 -q";
system($command, $err);
?>

mouze47
рядовой
Сообщения: 36
Зарегистрирован: 2007-12-07 10:10:28

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение mouze47 » 2009-09-10 8:46:42

Я так понимаю это код для html. В любом случае у меня нет файла sendemail. Есть только ссылка на exim с sendmail.

mouze47
рядовой
Сообщения: 36
Зарегистрирован: 2007-12-07 10:10:28

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение mouze47 » 2009-09-10 9:21:02

Народ ну не ужели ни кто не отправляет служебные сообщения с компьютера где установлен почтовый сервер на exim!

Гость
проходил мимо

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение Гость » 2009-09-10 11:08:23

mouze47 писал(а):Я так понимаю это код для html. В любом случае у меня нет файла sendemail. Есть только ссылка на exim с sendmail.
Обратите внимание на регистр букв и посмотрите тут http://caspian.dotconf.net/menu/Software/SendEmail/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение ProFTP » 2009-09-10 12:16:25

Код: Выделить всё

#!/usr/bin/perl 

use IO::Socket;
my $socket = IO::Socket::INET->new ("193.201..:25");
defined $socket or die "ERROR: $!";
$socket->print ("EHLO1512");
$r = <$socket>;
$socket->print ("MAIL FROM:<admin\@x00.org.ua>1512");.
$r = <$socket>;
$socket->print ("RCPT TO:<xxxxxx\@x00.org.ua>1512");
$r = <$socket>;
$socket->print ("DATA1512");
$r = <$socket>;
$socket->print ("From:John Doe<admin\@x00.org.ua>\n 
To:Frank Smith<xxxxxx\@x00.org.ua>\n 
Subject:Test. \n\n 
It's just test!!!1512");

$r = <$socket>;
$socket->print ("\.1512");
$r = <$socket>;
$socket->print ("QUIT1512");
$r = <$socket>;
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

mouze47
рядовой
Сообщения: 36
Зарегистрирован: 2007-12-07 10:10:28

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение mouze47 » 2009-09-10 14:45:08

Спасибо за скрипт. Но при отправке в логах екзима пишет след. ошибку
2009-09-10 15:35:44 SMTP protocol synchronization error (input sent without waiting for greeting): rejected connection from H=IP input="EHLO1512"
Что это за 1512?

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение ProFTP » 2009-09-10 14:53:46

вот из программы, поменяй там значения

Код: Выделить всё

  my $self     = shift;
    my @smtp_out = ();

    use IO::Socket;
    my $socket = IO::Socket::INET->new( PeerAddr => 'localhost:smtp(25)' )
      or die "ERROR: $!";
    my $answer_data;

    sysread $socket, $answer_data, 255;
    $smtp_out[0] = "1: $answer_data";

    syswrite $socket, "helo $self->{'se'}->{'smtp_server'}\r\n";
    sysread $socket, $answer_data, 255;
    $smtp_out[1] = "2: $answer_data";

    syswrite $socket, "mail from:<$self->{'se'}->{'mail_from'}>\r\n";
    sysread $socket, $answer_data, 255;
    $smtp_out[2] = "3: $answer_data";

    syswrite $socket, "rcpt to:<$self->{'p'}->{'email_smtp'}>\r\n";
    sysread $socket, $answer_data, 255;
    $smtp_out[3] = "4: $answer_data";

    syswrite $socket, "data\r\n";
    sysread $socket, $answer_data, 255;
    $smtp_out[4] = "5: $answer_data";

    syswrite $socket, "$self->{'se'}->{'text_new_mailbox'}\r\n";

    syswrite $socket, ".\r\n";
    sysread $socket, $answer_data, 255;
    $smtp_out[5] = "6: $answer_data";

    syswrite $socket, "quit\r\n";
    sysread $socket, $answer_data, 255;
    $smtp_out[7] = "7: $answer_data";

    close $socket;
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

mouze47
рядовой
Сообщения: 36
Зарегистрирован: 2007-12-07 10:10:28

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение mouze47 » 2009-09-10 15:24:07

Что не так в скрипте.

Ругается
scripts# ./send_mail
syntax error at ./send_mail line 12, near "$smtp_out"
syntax error at ./send_mail line 17, near "$smtp_out"
syntax error at ./send_mail line 22, near "$smtp_out"
syntax error at ./send_mail line 33, near "sysread"
Missing right curly or square bracket at ./send_mail line 43, within string
Execution of ./send_mail aborted due to compilation errors.



/scripts# cat send_mail
#!/usr/bin/perl
my $self = shift;
my @smtp_out = ();
use IO::Socket;
my $socket = IO::Socket::INET->new( PeerAddr => "192.168.1.222:2525" ) or die "ERROR: $!";
my $answer_data;
sysread $socket, $answer_data, 255;
$smtp_out[0] = "1: $answer_data";
syswrite $socket, "helo $self->{'se'}->{"192.168.1.222"}\r\n";
sysread $socket, $answer_data, 255;
$smtp_out[1] = "2: $answer_data";
syswrite $socket, "mail from:<$self->{'se'}->{"user@domen.ru"}>\r\n";
sysread $socket, $answer_data, 255;
$smtp_out[2] = "3: $answer_data";
syswrite $socket, "rcpt to:<$self->{'p'}->{"user@domen.ru"}>\r\n";
sysread $socket, $answer_data, 255;
$smtp_out[3] = "4: $answer_data";
syswrite $socket, "data\r\n";
sysread $socket, $answer_data, 255;
$smtp_out[4] = "5: $answer_data";
syswrite $socket, "$self->{'se'}->{"test"}\r\n";
syswrite $socket, ".\r\n";
sysread $socket, $answer_data, 255;
$smtp_out[5] = "6: $answer_data";
syswrite $socket, "quit\r\n";
sysread $socket, $answer_data, 255;
$smtp_out[7] = "7: $answer_data";
close $socket;

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение ProFTP » 2009-09-10 16:21:59

Код: Выделить всё


  use IO::Socket;

my $self;

my @smtp_out;

$self->{'se'}->{'smtp_server'} = 'bla';
$self->{'se'}->{'mail_from'} = 'bla';
$self->{'p'}->{'email_smtp'} = 'bla';
$self->{'se'}->{'text_new_mailbox'} = 'bla';

    my $socket = IO::Socket::INET->new( PeerAddr => 'localhost:smtp(25)' )
      or die "ERROR: $!";
    my $answer_data;

    sysread $socket, $answer_data, 255;
    $smtp_out[0] = "1: $answer_data";

    syswrite $socket, "helo $self->{'se'}->{'smtp_server'}\r\n";
    sysread $socket, $answer_data, 255;
    $smtp_out[1] = "2: $answer_data";

    syswrite $socket, "mail from:<$self->{'se'}->{'mail_from'}>\r\n";
    sysread $socket, $answer_data, 255;
    $smtp_out[2] = "3: $answer_data";

    syswrite $socket, "rcpt to:<$self->{'p'}->{'email_smtp'}>\r\n";
    sysread $socket, $answer_data, 255;
    $smtp_out[3] = "4: $answer_data";

    syswrite $socket, "data\r\n";
    sysread $socket, $answer_data, 255;
    $smtp_out[4] = "5: $answer_data";

    syswrite $socket, "$self->{'se'}->{'text_new_mailbox'}\r\n";

    syswrite $socket, ".\r\n";
    sysread $socket, $answer_data, 255;
    $smtp_out[5] = "6: $answer_data";

    syswrite $socket, "quit\r\n";
    sysread $socket, $answer_data, 255;
    $smtp_out[7] = "7: $answer_data";

    close $socket;
print "### Status ###";
print "@smtp_out\n\n";

Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

mouze47
рядовой
Сообщения: 36
Зарегистрирован: 2007-12-07 10:10:28

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение mouze47 » 2009-09-11 8:49:01

ProFTP
Спасибо большое за скрипт. Он рабочий.
Только, в полученном письме почему то не отображается От, Кому и тема письма. Тему я в письме не указал, только не знаю как.
Вот заголовок письма
X-Account-Key: account2
X-UIDL: 0000082d478f5088
X-Mozilla-Status: 1001
X-Mozilla-Status2: 00000000
X-Mozilla-Keys:
Return-path: <user@domen.ru>
Envelope-to: user@domen.ru
Delivery-date: Fri, 11 Sep 2009 09:29:29 +0400
Received: from localhost ([127.0.0.1])
by domain.ru with smtp (Exim 4.68)
(envelope-from <user@domen.ru>)
id 1MlyhA-0003sY-J3
for user@domen.ru; Fri, 11 Sep 2009 09:29:29 +0400

Я не силен в perl, если не сложно подскажи как с этим письмом отправить вложеный файл.
И еще как можно из командной строки передать адресат, т.е.
send_mail user@domen

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: Подскажите как отправить письмо из скрипта

Непрочитанное сообщение ProFTP » 2009-09-11 16:19:25

я вложенный не отправлял, можешь поискать в гугле
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение