Страница 1 из 1

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

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

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

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

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

echo 'test'|mail user@domen.ru
и письмо уйдёт.

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

Добавлено: 2009-09-09 5:17:21
zingel
не факт что уйдёт потому, что алиас с mail может стоять в /bin/false, посему запускать непосредственно сам exim с пайпом

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

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

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

Добавлено: 2009-09-09 9:59:55
ProFTP

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

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

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

Добавлено: 2009-09-09 10:22:52
mouze47
Не получается. Скрипт выполняется, но ни какого сообщения не появляется. Письмо не приходит. В логах тоже пусто.

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);
?>

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

Добавлено: 2009-09-10 8:46:42
mouze47
Я так понимаю это код для html. В любом случае у меня нет файла sendemail. Есть только ссылка на exim с sendmail.

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

Добавлено: 2009-09-10 9:21:02
mouze47
Народ ну не ужели ни кто не отправляет служебные сообщения с компьютера где установлен почтовый сервер на exim!

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

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

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

Добавлено: 2009-09-10 12:16:25
ProFTP

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

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

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

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

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

Добавлено: 2009-09-10 14:53:46
ProFTP
вот из программы, поменяй там значения

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

  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;

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

Добавлено: 2009-09-10 15:24:07
mouze47
Что не так в скрипте.

Ругается
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;

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

Добавлено: 2009-09-10 16:21:59
ProFTP

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


  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";


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

Добавлено: 2009-09-11 8:49:01
mouze47
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

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

Добавлено: 2009-09-11 16:19:25
ProFTP
я вложенный не отправлял, можешь поискать в гугле