@Ismar

Как отправить письмо при помощи smtp?

Не понял некоторые моменты, пожалуйста объясните что нужно вводить в Auth login,
login и password

function get_data($smtp_conn)
    {
        $data="";
        while($str = fgets($smtp_conn,515))
        {
            $data .= $str;
            if(substr($str,3,1) == " ") { break; }
        }
        return $data;
    }

    $header="Date: ".date("D, j M Y G:i:s")." +0700\r\n";
    $header.="From: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode(‘Максим’)))."?= <ismar_suleymanov@mail.ru>\r\n";
    $header.="X-Mailer: The Bat! (v3.99.3) Professional\r\n";
    $header.="Reply-To: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode(‘Максим’)))."?= <ismar_suleymanov@mail.ru>\r\n";
    $header.="X-Priority: 3 (Normal)\r\n";
    $header.="Message-ID: <172562218.".date("YmjHis")."@mail.ru>\r\n";
    $header.="To: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode(‘Сергей’)))."?= <ismar_suleymanov@mail.ru>\r\n";
    $header.="Subject: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode(‘проверка’)))."?=\r\n";
    $header.="MIME-Version: 1.0\r\n";
    $header.="Content-Type: text/plain; charset=windows-1251\r\n";
    $header.="Content-Transfer-Encoding: 8bit\r\n";

    $text="привет, проверка связи.";

    $smtp_conn = fsockopen("smtp.mail.ru", 25,$errno, $errstr, 10);
    if(!$smtp_conn) {print "соединение с серверов не прошло"; fclose($smtp_conn); exit;}
    $data = get_data($smtp_conn);
    fputs($smtp_conn,"EHLO vasya\r\n");
    $code = substr(get_data($smtp_conn),0,3);
    if($code != 250) {print "ошибка приветсвия EHLO"; fclose($smtp_conn); exit;}
    fputs($smtp_conn,"AUTH LOGIN\r\n");// Что нужно сюда писать? какой логин?
    $code = substr(get_data($smtp_conn),0,3);
    if($code != 334) {print "сервер не разрешил начать авторизацию"; fclose($smtp_conn); exit;}

    fputs($smtp_conn,base64_encode("login")."\r\n");// Что нужно сюда писать? логин чего?
    $code = substr(get_data($smtp_conn),0,3);
    if($code != 334) {print "ошибка доступа к такому юзеру"; fclose($smtp_conn); exit;}

    fputs($smtp_conn,base64_encode("password")."\r\n");// Что нужно сюда писать? пароль от чего?
    $code = substr(get_data($smtp_conn),0,3);
    if($code != 235) {print "не правильный пароль"; fclose($smtp_conn); exit;}

    $size_msg=strlen($header."\r\n".$text);

    fputs($smtp_conn,"MAIL FROM:<login@mail.ru> SIZE=".$size_msg."\r\n");// Как я понял здесь майл от кого 
    $code = substr(get_data($smtp_conn),0,3);
    if($code != 250) {print "сервер отказал в команде MAIL FROM"; fclose($smtp_conn); exit;}

    fputs($smtp_conn,"RCPT TO:<qwe@asd.ru>\r\n");// здесь кому
    $code = substr(get_data($smtp_conn),0,3);
    if($code != 250 AND $code != 251) {print "Сервер не принял команду RCPT TO"; fclose($smtp_conn); exit;}

    fputs($smtp_conn,"DATA\r\n");
    $code = substr(get_data($smtp_conn),0,3);
    if($code != 354) {print "сервер не принял DATA"; fclose($smtp_conn); exit;}

    fputs($smtp_conn,$header."\r\n".$text."\r\n.\r\n");
    $code = substr(get_data($smtp_conn),0,3);
    if($code != 250) {print "ошибка отправки письма"; fclose($smtp_conn); exit;}

    fputs($smtp_conn,"QUIT\r\n");
    fclose($smtp_conn);
  • Вопрос задан
  • 541 просмотр
Решения вопроса 1
summoner2015
@summoner2015
Backend всему голова
Можно воспользоваться готовой библиотекой phpMailer - https://github.com/PHPMailer/PHPMailer
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
swiftmailer.org

хватит писать велосипеды.
Ответ написан
Комментировать
vahe_2000
@vahe_2000
Используйте Pear Mail -> GitHub,pear.php.net

<?php
// Pear Mail Library(Груша Почта Библиотека)
require "Mail.php";

$from = '<from.gmail.com>';
$to = '<to.yahoo.com>';
$subject = 'Здравствуй!';
$body = "Привет,\n\n как дела?";

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);

$smtp = Mail::factory('smtp', array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => '465',
        'auth' => true,
        'username' => 'user@gmail.com',
        'password' => 'passwordxxx'
    ));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
    echo('<p>' . $mail->getMessage() . '</p>');
} else {
    echo('<p>Сообщение успешно отправлено!</p>');
}
?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы