Forum Webscript.Ru

Программирование => Perl => Тема начата: Yaroslav от 01 Марта 2010, 11:10:36

Название: отправка почты
Отправлено: Yaroslav от 01 Марта 2010, 11:10:36
если отправлять почту стандартным способом

 open (MAIL, "|/usr/sbin/sendmail -t -f");
 print MAIL "$text";

при этом если юзер вводит сообщение где в строке только 1 точка
Цитировать
Здрасте
.
перезвоните

я понимаю что это бредово выглядит, но все же.
по почте доходит только
Цитировать
Здрасте
.


как это исправить?
Название: отправка почты
Отправлено: arto от 02 Марта 2010, 09:30:55
Здрасте
..
перезвоните
Название: отправка почты
Отправлено: arto от 02 Марта 2010, 09:31:39
да и вообще, как оно работает?

# sendmail -t -f
sendmail: option requires an argument -- f
#
Название: отправка почты
Отправлено: Yaroslav от 02 Марта 2010, 22:00:30
Цитировать
arto:
# sendmail -t -f
sendmail: option requires an argument -- f
#

там мыло добавлять надо
sendmail -t -f $mymail
Название: отправка почты
Отправлено: arto от 03 Марта 2010, 09:20:30
open (MAIL, "|/usr/sbin/sendmail -t -f");

и где там "мыло"?
Название: отправка почты
Отправлено: Yaroslav от 03 Марта 2010, 10:39:25
упусил что не загаживать лишними переменными код.
как окозалось есть те кто это не понял.
Название: отправка почты
Отправлено: Yaroslav от 03 Марта 2010, 10:40:37
по существу будут ответы?
или проверять посторчно на наличие точки?
Название: отправка почты
Отправлено: arto от 03 Марта 2010, 11:21:06
а чем вам не понравился первый ответ?
и что означает "построчно" ?
Название: отправка почты
Отправлено: arto от 03 Марта 2010, 11:24:49
можно использовать -i, но это, afaik, непереносимо
Название: отправка почты
Отправлено: Yaroslav от 03 Марта 2010, 13:38:55
Цитировать
arto:
а чем вам не понравился первый ответ?

сообщение набираю не я, а юзер.
вот юзеру хочеться пиать только 1 точку в строке.
построчно - это так
foreach (split /\\n/, $text) { print $_; }
Название: отправка почты
Отправлено: arto от 03 Марта 2010, 13:58:53
зачем так сложно?

s#^\\.$#..#gm
Название: отправка почты
Отправлено: Yaroslav от 03 Марта 2010, 15:09:06
Цитировать
arto:
s#^\\.$#..#gm

действительно, не подумал.
но все же, это единственный способ?
Название: отправка почты
Отправлено: arto от 03 Марта 2010, 15:34:59
Цитировать
arto:
можно использовать -i, но это, afaik, непереносимо
Название: отправка почты
Отправлено: APL от 05 Марта 2010, 15:35:03
open MAIL, \'|/usr/sbin/sendmail -t\' || die \'error sending message\';
print MAIL "From: from\\@mail.ru\\n";
print MAIL "To: to\\@mail.ru\\n";
print MAIL "Content-Type: text\\/plain\\n";
print MAIL "Subject: Тема письма\\n\\n";
print MAIL "Само письмо (никаких проблем с точками у меня никогда не было)\\n\\n";
close MAIL;
Название: отправка почты
Отправлено: arto от 05 Марта 2010, 16:11:22
а и попробуйте!
и cat /dev/null | sendmail -d0.1 покажите
Название: отправка почты
Отправлено: Yaroslav от 05 Марта 2010, 16:19:22
APL

$mail="Само письмо
.
(никаких проблем с точками у меня никогда не было)";
open MAIL, \'|/usr/sbin/sendmail -t\' || die \'error sending message\';
print MAIL "From: from\\@mail.ru\\n";
print MAIL "To: to\\@mail.ru\\n";
print MAIL "Content-Type: text\\/plain\\n";
print MAIL "Subject: Тема письма\\n\\n";
print MAIL "$mail";
close MAIL;
print "будут";

пробуй
Название: отправка почты
Отправлено: APL от 05 Марта 2010, 16:20:47
У меня например такой сендмейл

Version 8.14.3
Compiled with: DNSMAP LDAPMAP LDAP_REFERRALS LOG MAP_REGEX MATCHGECOS
      MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6 NETUNIX
      NEWDB NIS NISPLUS PIPELINING SASLv2 SCANF SOCKETMAP STARTTLS
      TCPWRAPPERS USERDB USE_LDAP_INIT XDEBUG
Название: отправка почты
Отправлено: APL от 05 Марта 2010, 16:30:34
Yaroslav:

Вы сами пробовали? У меня работает!
Название: отправка почты
Отправлено: APL от 05 Марта 2010, 16:31:46
Ааа... сорри, действительно не пришло после точки
Название: отправка почты
Отправлено: APL от 05 Марта 2010, 16:33:45
Нужно вот так сделать с письмом, тогда дойдет полностью
$mail =~ s/\\n/\\r/g;