За последние 24 часа нас посетили 7652 программиста и 445 роботов. Сейчас ищут 139 программистов ...

Sendmail в linux

Тема в разделе "Работа с почтой", создана пользователем dimalogin, 14 май 2008.

  1. dimalogin

    dimalogin Активный пользователь

    С нами с:
    24 фев 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Москва
    Здравствуйте, все наверно пользовались отладочной заглушкой Денвера для получения почты, отправляемой функцией mail(), а вот я с недавнего времени заинтересовался дистрибутивом openSUSE 10.3 и он мне понравился, так что постепенно перехожу на эту операционную систему (Linux), но пока еще не уверенно себя чувствую, может кто-нибудь знает как там организовать аналог заглушки Денвера для mail()? Программа sendmail - очень сложная, может кто-нибудь знает настройки для того, чтобы получить результат аналогичный Денверовскому, чтоб при использовании функции mail() почта складывалась в отдельную папку, естественно все это на локальном сервере Apache, для тестирования скриптов :)
    Тогда может это просто можно как-то сделать?
     
  2. hedrok

    hedrok Активный пользователь

    С нами с:
    21 окт 2008
    Сообщения:
    1
    Симпатии:
    0
    Только что решал эту проблему... Почему-то в сети ничего не нашёл... :roll:
    Сделал следующее:
    В файл fake_sendmail.sh записал:
    Код (Text):
    1. #!/bin/sh
    2. prefix="/путь/к/папке/с/письмами"
    3. if [ ! -f $prefix/num ]; then
    4.     echo "0" > $prefix/num
    5. fi
    6. num=`cat $prefix/num`
    7. num=$(($num + 1))
    8. echo $num > $prefix/num
    9.  
    10. name="$prefix/letter$num.txt"
    11. while read line
    12. do
    13.     echo $line >> $name
    14. done
    15. /bin/true
    Добавляем права на исполнение:
    chmod +x fake_sendmail.sh

    Папке с письмами я дал права 777
    chmod 777 folder

    Далее правим php.ini:
    sendmail_path = /путь/к/fake_sendmail.sh

    Вот и всё. У меня теперь функция mail() успешно складирует письма в папочку в виде файлов letter##.txt :)
     
  3. gruz

    gruz Активный пользователь

    С нами с:
    7 мар 2010
    Сообщения:
    1
    Симпатии:
    0
    Большое спасибо за скриптик.

    Долго мучался - он создаёт файлы, которые не понимаются, как .eml
    Ни thunderbirdm ни kmail не видел содержания, если письмо в HTML формате.

    Разобрался - этот скрипт срезает все пробелы перед строками.
    Потому в таком важном месте, как

    Код (Text):
    1. Content-Type: multipart/alternative;
    2.     boundary="b1_83c24793545998816659d3b64bd37dfa"
    в результирующем файле оказывается
    Код (Text):
    1. Content-Type: multipart/alternative;
    2. boundary="b1_83c24793545998816659d3b64bd37dfa"
    А пробел/табуляция очень важен перед boundary="b1_83c24793545998816659d3b64bd37dfa"

    Чтобы обрабатывало, как надо, надо заменить весь цикл

    Код (Text):
    1. while read line
    2. do
    3.       echo "$line" >> $name
    4. done
    на

    Код (Text):
    1. cat >> $name
    Тогда ничего не обрежется.

    Всё вместе:
    Код (Text):
    1.  
    2. #!/bin/sh
    3. prefix="/var/mail/sendmail/new"
    4. numPath="/var/mail/sendmail"
    5.  
    6. if [ ! -f $numPath/num ]; then
    7.     echo "0" > $numPath/num
    8. fi
    9. num=`cat $numPath/num`
    10. num=$(($num + 1))
    11. echo $num > $numPath/num
    12.  
    13. name="$prefix/letter_$num.eml"
    14.  
    15. cat >> $name
    16.  
    17.  
    18.  
    19. chmod 777 $name
    20. /bin/true
     
  4. inferno67

    inferno67 Активный пользователь

    С нами с:
    13 сен 2011
    Сообщения:
    1
    Симпатии:
    0
    У меня этот скрипт складывает не письма, а непонятные файлы под названием num, а в них пусто