За последние 24 часа нас посетили 19347 программистов и 1615 роботов. Сейчас ищут 867 программистов ...

PHPmail переделать на свой SMTP

Тема в разделе "PHP для новичков", создана пользователем Johnboss, 6 дек 2017.

  1. Johnboss

    Johnboss Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    36
    Симпатии:
    0
    Добрый день!

    Помогите, пожалуйста, с грамматикой.
    Как правильно прописать настройки внешнего SMTP сервера для моего скрипта, который отправляет почту?

    Код (Text):
    1.  
    2. function cute_mail($to, $subject, $message, $filename = '', $type = 'plain'){
    3.     global $config;
    4.    
    5.     $eol = PHP_EOL;
    6.    
    7.     $mail     = 'foto@itgreen.ru';
    8.     $uniqid   = md5(uniqid(time));
    9.     $headers  = 'From: '.$mail. $eol;
    10.     $headers .= 'Reply-to: '.$mail. $eol;
    11.     $headers .= 'Return-Path: '.$mail. $eol;
    12.     $headers .= 'Message-ID: <'.$uniqid.'@'.$_SERVER['SERVER_NAME'].">". $eol;
    13.     $headers .= 'MIME-Version: 1.0'. $eol;
    14.     $headers .= 'Date: '.gmdate('D, d M Y H:i:s', time). $eol;
    15.     $headers .= 'X-Priority: 3'."\n";
    16.     $headers .= 'X-MSMail-Priority: Normal'. $eol;
    17.     $headers .= 'X-Mailer: '.$config['version_name'].' '.$config['version_id']. $eol;
    18.     $headers .= 'X-MimeOLE: '.$config['version_name'].' '.$config['version_id']. $eol;
    19.     $headers .= 'Content-Type: multipart/mixed;boundary="----------'.$uniqid.'"'. $eol;//. "\n\n";
    20.     $headers .= '------------'.$uniqid . $eol;
    21.     $headers .= 'Content-type: text/'.$type.';charset='.$config['charset'] . $eol;
    22.     $headers .= 'Content-transfer-encoding: 7bit';
    23.  
    24.     if (is_file($filename)){
    25.         $file     = fopen($filename, 'rb');
    26.         $message .= "\n".'------------'.$uniqid."\n";
    27.         $message .= 'Content-Type: application/octet-stream;name="'.basename($filename).'"'. $eol;
    28.         $message .= 'Content-Transfer-Encoding: base64'. $eol;
    29.         $message .= 'Content-Disposition: attachment;';
    30.         $message .= 'filename="'.basename($filename).'"'."\n\n";
    31.         $message .= chunk_split(base64_encode(fread($file, filesize($filename)))). $eol;
    32.     }
    33.        
    34.     $res = mail($to, $subject, $message, $headers);
    35. }
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
  3. Johnboss

    Johnboss Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    36
    Симпатии:
    0
    Я в PHP.INI прописал

    Код (Text):
    1. smtp_server=smtp.yandex.ru
    2. smtp_port=465
    3. smtp_ssl=auto
    4. error_logfile=error.log
    5. debug_logfile=debug.log
    6. auth_username=username
    7. auth_password=password
    Но письма все равно идут через phpmail провайдера.
    Поддержка сказала, что надо переделать скрипт отправки почты.
    Добавить туда что то типа
    Код (Text):
    1. <?php
    2. require_once "Mail.php";
    3.  
    4. $from = "Sandra Sender sender@example.com";
    5. $to = "Ramona Recipient recipient@example.com";
    6. $subject = "Hi!";
    7. $body = "Hi,\n\nHow are you?";
    8.  
    9. $host = "mail.example.com";
    10. $username = "smtp_username";
    11. $password = "smtp_password";
    12.  
    13. $headers = array ('From' => $from,
    14. 'To' => $to,
    15. 'Subject' => $subject);
    16. $smtp = Mail::factory('smtp',
    17. array ('host' => $host,
    18. 'auth' => true,
    19. 'username' => $username,
    20. 'password' => $password));
    21.  
    22. $mail = $smtp->send($to, $headers, $body);
    23.  
    24. if (PEAR::isError($mail)) {
    25. echo("<p>" . $mail->getMessage() . "</p>");
    26. } else {
    27. echo("<p>Message successfully sent!</p>");
    28. }
    29. ?>
    Но я не очень волоку в PHP
     
  4. Johnboss

    Johnboss Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    36
    Симпатии:
    0
    Не ужели никто не сталкивался с таким?
     
  5. dbocman

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

    С нами с:
    30 окт 2017
    Сообщения:
    20
    Симпатии:
    1
    Ну я PHPMailer использую.
    Там просто
    PHP:
    1. require_once('PHPMailer/PHPMailerAutoload.php');
    2.       $mail = new PHPMailer();
    3.       $mail->AddAddress($email);
    4.       $mail->IsSMTP();
    5.       $mail->SMTPSecure = "ssl";
    6.       $mail->Host = 'smtp.mail.ru';
    7.       $mail->SMTPAuth = true;
    8.       $mail->Port = 465;
    9.       $mail->Username = $Username;
    10.        $mail->Password = $Password;
    11.        $mail->From = $email;  
    12.        $mail->FromName = $head;
    13.        $mail->CharSet='utf-8';
    14.        $mail->Encoding = "base64";
    15.        $mail->IsHTML(true);
    16.        $mail->Subject = $Subject;
    17.        $mail->ReturnPath = $email;
    18.        $mail->AddEmbeddedImage("img.img", $filename, $filename, 'base64', $type);
    19.        $mail->AddAttachment("doc.doc", $filename);
    20.        $mail->Body = $html;
    21.        $mail->AltBody = strip_tags($html);
    22.        if (!$mail->Send()) {$error='Ошибка: '.$mail->ErrorInfo;}
     
  6. Johnboss

    Johnboss Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    36
    Симпатии:
    0
    Спасибо! А не подскажите, как это в моем скрипте должно выглядеть?
     
  7. dbocman

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

    С нами с:
    30 окт 2017
    Сообщения:
    20
    Симпатии:
    1
    Вот так и должно,
    скачать PHPMailer наполнить переменные
    $Username имя
    $email пароль
    AddAddress($email) кому
    $mail->AddAttachment("doc.doc", $filename); вложить файл
    AddEmbeddedImage картинку
    $mail->Subject заголовок
    $mail->From от кого и т.д.