Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 33
1

SMTP отправка писем с авторизацией

28.02.2017, 23:13. Просмотров 2309. Ответов 31
Метки нет (Все метки)


Доброго дня , друзья подскажите вот есть код , нужно сделать отправку писем через SMTP с авторизацией , что нужно в нем изменить, буду благодарен за ответ.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if(!$err)
        {
        $thm="Восстановление пароля";
        $c='Добрый день!<br><br>
        Вы, или кто-то от Вашего имени запросил данные<br> на восстановление забытого пароля к Вашему аккаунту<br>
        <br>
        Ваш пароль:<b> '.$rr['pass'].'</b>
        <br><br><br>
        С уважением, 
        администрация сайта '.$_SERVER['HTTP_HOST'];
        
  
  
 
 
    
        if (@mail_utf8($email, $thm, $c, $rru['email'])) 
        $ot = '<p><font color=green>Письмо с паролем отправлено на Ваш почтовый ящик</font></p>';
        else 
        $err = 'Не удалось отправить письмо на указанный e-mail<br>Попробуйте еще раз';
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2017, 23:13
Ответы с готовыми решениями:

Отправка писем через SMTP с авторизацией
Доброго времени суток. Я начинающий и не с первого раза все выходит=) вот добрался до одной главы в...

Отправка писем с localhost путем авторизации на SMTP
Доброго времени суток. Задача: нужен скрипт для рассылки писем (по сути автоматизация действий с...

Не работает отправка писем на SMTP google через сокеты
Выдает ошибку 110 Connection timed out Этот код: if (smtpmail('xxx', 'xxx', 'Проверка', 'Проверка...

Отправка большого количества писем через SMTP
Здравствуйте. Есть такая задачка предположим у меня база майлов юзеров которые подписались на...

31
Эксперт PHP
4374 / 3257 / 1061
Регистрация: 06.01.2011
Сообщений: 9,418
01.03.2017, 16:09 2
Код дописывать долго, да и нет в этом смысла. Используйте лучше готовую библиотеку вроде SwiftMailer или PhpMailer.
1
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 33
01.03.2017, 16:47  [ТС] 3
Все в спам летит нужно сделать через smtp , ну все равно спасибо за совет
0
Эксперт PHP
4374 / 3257 / 1061
Регистрация: 06.01.2011
Сообщений: 9,418
01.03.2017, 19:04 4
Цитата Сообщение от Александр454545 Посмотреть сообщение
Все в спам летит нужно сделать через smtp
Ну так я и говорю, что в тех библиотеках реализована поддержка работы с SMTP.

А вообще, если нормально прописать нужные данные на сервере и отсылать нужные заголовки -- ничего в спам лететь не будет.
1
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 33
01.03.2017, 20:25  [ТС] 5
А как то по нагляднее можно показать? Я значит как то не правильно понял
0
Эксперт PHP
4374 / 3257 / 1061
Регистрация: 06.01.2011
Сообщений: 9,418
01.03.2017, 20:45 6
Например, SwiftMailer: http://swiftmailer.org/docs/sending.html
Там и прочие функции задокументированы.
1
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 33
02.03.2017, 15:11  [ТС] 7
Сможешь мне написать как нужно на моем коде? Я тебе отправлю 100 р на телефон

Добавлено через 3 минуты
Вот весь код для этого письма

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?
 
 
 
@session_start();
require_once('../connect/connect.php');
include_once('../lib/lib.php');
 
$bp="../";
if($_GET['bp'])
$bp=$_GET['bp'];
 
$reload = intval($_REQUEST['reload']);
 
    
 
if($_POST['sub'])
    {
    $cap_a = trim($_POST['cap']);
    if(!$cap_a)
    $err .= 'Не указан защитный код<br>';
    else
        {
        if($_SESSION['real_code'] != $cap_a)
        $err .= 'Неверно указан защитный код<br>';
        else
            {
            $cap_a = number_format($cap_a,0,"",",");
            $cap_b = $_POST['ip_address'];
            if($cap_a!=$cap_b) $err .= 'Неверно указан защитный код<br>';
            }
        }
    if(isset($_SESSION['real_code'])) unset($_SESSION['real_code']);
    
    
    
    if(!empty($_POST['email']))
        {
            
        
  
        $email=anti(trim($_POST['email']));
        $r=mysql_query("SELECT * FROM akk WHERE email='".$email."'");
        $nr=mysql_num_rows($r);
        if($nr)
            {
            $rr=mysql_fetch_array($r);
            }
        else $err .= 'Пользователя с таким e-mail нет в базе<br>';
        }
    else $err .= 'Не указан e-mail<br>';
 
    if(!$err)
        {
        $thm="Восстановление пароля";
        $c='Добрый день!<br><br>
        Вы, или кто-то от Вашего имени запросил данные<br> на восстановление забытого пароля к Вашему аккаунту<br>
        <br>
        Ваш пароль:<b> '.$rr['pass'].'</b>
        <br><br><br>
        С уважением, 
        администрация сайта '.$_SERVER['HTTP_HOST'];
        
  
  
 
 
    
        if (@mail_utf8($email, $thm, $c, $rru['email'])) 
        $ot = '<p><font color=green>Письмо с паролем отправлено на Ваш почтовый ящик</font></p>';
        else 
        $err = 'Не удалось отправить письмо на указанный e-mail<br>Попробуйте еще раз';
        }
    }
Добавлено через 18 часов 20 минут
Тема еще не решена, если кто нибудь знает решение буду благодарен
0
Эксперт PHP
4374 / 3257 / 1061
Регистрация: 06.01.2011
Сообщений: 9,418
02.03.2017, 16:25 8
Лучший ответ Сообщение было отмечено Александр454545 как решение

Решение

Во-первых, скачайте SwiftMailer и поместите в папку сайта. Затем попробуйте так (только в скрипте пропишите правильный путь к скачанной библиотеке):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
session_start();
 
require_once('../connect/connect.php');
include_once('../lib/lib.php');
 
# Здесь пропишите правильный путь
require_once 'lib/swift_required.php';
 
$bp = "../";
 
if (isset($_GET['bp'])) {
    $bp = $_GET['bp'];
}
 
$reload = intval($_REQUEST['reload']);
 
if($_SERVER['REQUEST_METHOD'] == 'POST') 
{
    $cap_a = trim($_POST['cap']);
    
    if(!$cap_a) {
        $err .= 'Не указан защитный код<br>';
    } else {
        if ($_SESSION['real_code'] != $cap_a) {
            $err .= 'Неверно указан защитный код<br>';
        } else {
            $cap_a = number_format($cap_a,0,"",",");
            $cap_b = $_POST['ip_address'];
            if ($cap_a!=$cap_b) {
                $err .= 'Неверно указан защитный код<br>';
            }
        }
    }
    
    if (isset($_SESSION['real_code'])) {
        unset($_SESSION['real_code']);
    }
    
    if (!empty($_POST['email'])) {
        $email = anti(trim($_POST['email']));
        $r = mysql_query("SELECT * FROM akk WHERE email='".$email."'");
        
        if (mysql_num_rows($r)) {
            $rr = mysql_fetch_array($r);
        } else {
            $err .= 'Пользователя с таким e-mail нет в базе<br>';
        }
    } else {
        $err .= 'Не указан e-mail<br>';
    }
 
    if(!$err) {
        $message = 'Добрый день!<br><br>
            Вы, или кто-то от Вашего имени запросил данные<br> на восстановление забытого пароля к Вашему аккаунту<br>
            <br>
            Ваш пароль:<b> '.$rr['pass'].'</b>
            <br><br><br>
            С уважением, 
            администрация сайта'. $_SERVER['SERVER_NAME'];
        
        $transport = Swift_MailTransport::newInstance();
            
        $mailer = Swift_Mailer::newInstance($transport);
 
        # Создание сообщения
        $message = Swift_Message::newInstance('Восстановление пароля')
            ->setFrom([$rru['email'] => 'Александр'])
            ->setTo($email)
            ->setBody($message);
 
        if ($mailer->send($message)) {
            $ot = '<p><font color=green>Письмо с паролем отправлено на Ваш почтовый ящик</font></p>';
        } else {
            $err = 'Не удалось отправить письмо на указанный e-mail<br>Попробуйте еще раз';
        }
    }
}
Если письма так и будут идти в спам, то замените
PHP
1
$transport = Swift_MailTransport::newInstance();
На
PHP
1
2
3
$transport = Swift_SmtpTransport::newInstance('адрес smtp сервера', 25)
            ->setUsername('ваш логин на smtp сервере')
            ->setPassword('ваш пароль на smtp сервере');
1
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 33
02.03.2017, 18:54  [ТС] 9
Не подскажите как скачать SwiftMailer? Не могу найти

Добавлено через 19 минут
все нашел

Добавлено через 19 минут
Работает, спасибо скиньте номер телефона на ivanov45o@yandex.ru
я Вам переведу 100 р.
0
Эксперт PHP
4374 / 3257 / 1061
Регистрация: 06.01.2011
Сообщений: 9,418
02.03.2017, 20:33 10
Хорошо, что работает. Ничего не нужно.
0
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 33
02.03.2017, 20:39  [ТС] 11
Спасибо

Добавлено через 5 минут
А как сделать чтобы тело письма отправлялось в HTML ?
0
Эксперт PHP
4374 / 3257 / 1061
Регистрация: 06.01.2011
Сообщений: 9,418
02.03.2017, 20:58 12
Цитата Сообщение от Александр454545 Посмотреть сообщение
А как сделать чтобы тело письма отправлялось в HTML ?
Пропустил этот момент. Замените это
PHP
1
 ->setBody($message);
На
PHP
1
 ->setBody($message, 'text/html');
1
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 33
02.03.2017, 21:07  [ТС] 13
Спасибо большое
0
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 33
04.03.2017, 13:13  [ТС] 14
А как быть с этим кодом? Уже всю голову сломал, никак не работает, подскажите если не сложно

Добавлено через 1 минуту
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?
$thm="Ваше объявление добавлено на сайт";
$c='<a href="http://.ru/"><img width="165" height="55" src="http://.ru/icon/8.gif" border=0></a> &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;
 
<a href="http://.ru/blok/add.php"><img src="http://.ru/icon/button.png" border=0></a><br><br>
 
 
 
Здравствуйте!<br><br>
 
Вы, или кто-то от Вашего имени разместил объявление на сайте<br> 
<a href="'.dir_top().'">'.dir_top().'</a>
указав при этом Ваш электронный адрес.<br>
<br>
Для редактирования объявления перейдите по ссылке:<br>
<a href="'.dir_tek().'edit.php?id='.$ins.'&pass='.$data['pass'][1].'">Редактирование объявления</a><br>';
 
$c .= '<br>
Для удаления перейдите по ссылке: <br>
<a href="'.dir_tek().'del.php?id='.$ins.'&pass='.$data['pass'][1].'">Удалить</a><br>
<p>
 
 
 
 
        <h4>Хотите продать быстрее?</h4>
        
        На сайте объявлений .ru Вы можете применить дополнительные уcлуги:<br><br>
        
        
        <img src="http://.ru/icon/platno.png"/><br>
    
 
        <font color = "#666666">
<b>«Сделать VIP-объявлением»</b> <br>(в 10 рaз больше прoсмoтров) со скидкой 50% - <b>57 рyб.</b> <br>
<b>«Спецразмещение»</b><br> (в 15 рaз больше прoсмoтров) со скидкой 50% - <b>94 рyб.</b> <br>
<b>«Выделить объявление»</b> <br>(в 5 рaз больше прoсмoтров) со скидкой 50% - <b>39 рyб.</b> <br>
<b>«Поднять объявление»</b> <br>(в 3 рaзa больше прoсмoтров) со скидкой 50% - <b>15 рyб.</b> <br><br>
 
 
 
 
 
        Поделитесь Вашим объявлением в Twitter, Одноклассниках, <br>ВКонтакте, Facebook, Google+ (бесплатно)<br>
        (в 2 раза больше просмотров Вашего объявления) </font><br><br><br>
        
    <a href="http://zaymi..ru"><img src="http://.ru/icon/975699f984a43a0dd9959d35bde0dbd9.gif"> </a><br> <br> 
        
    <font color = "#666666">    Мы предлагаем вам открыть собственный Магазин на .ru<br>
        с подробной информацией о себе и своей компании.<br>
        Магазин — это один из самых эффективных способов <br>
        быстро найти покупателей. <br>
        Ваш товар смогут увидеть тысячи потенциальных<br> покупателей каждый месяц.<br>
        Акция на открытие магазина 199 рублей в месяц*<br>
        *Места ограничены.</font> <br><br><br>
            
        
 
 
С уважением,<br>
Администрация сайта <a href="'.dir_top().'">'.dir_top().'</a>';
@mail_utf8($data['email'][1], $thm, $c, $rru['email']);
?>
0
Эксперт PHP
4374 / 3257 / 1061
Регистрация: 06.01.2011
Сообщений: 9,418
05.03.2017, 09:32 15
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
 
$message = '
<a href="http://.ru/">
    <img width="165" height="55" src="http://.ru/icon/8.gif" border="0">
</a>
&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;
 
<a href="http://.ru/blok/add.php">
    <img src="http://.ru/icon/button.png" border=0>
</a>
<br>
<br>
<h1>Здравствуйте!</h1>
<p>Вы, или кто-то от Вашего имени, разместил объявление на сайте <a href="'.dir_top().'">'.dir_top().'</a>,
указав при этом Ваш электронный адрес.</p>
 
<p>Для редактирования объявления перейдите по ссылке:<br>
<a href="'.dir_tek().'edit.php?id='.$ins.'&pass='.$data['pass'][1].'">Редактирование объявления</a></p>
 
<p>Для удаления перейдите по ссылке:<br>
<a href="'.dir_tek().'del.php?id='.$ins.'&pass='.$data['pass'][1].'">Удалить</a></p>
 
<h4>Хотите продать быстрее?</h4>
<p>На сайте объявлений .ru Вы можете применить дополнительные уcлуги:</p>
 
<br>
<img src="http://.ru/icon/platno.png"/><br>
 
<div style="color: #666">
    <b>«Сделать VIP-объявлением»</b> <br>(в 10 рaз больше прoсмoтров) со скидкой 50% - <b>57 рyб.</b>
    <br>
    <b>«Спецразмещение»</b><br> (в 15 рaз больше прoсмoтров) со скидкой 50% - <b>94 рyб.</b>
    <br>
    <b>«Выделить объявление»</b> <br>(в 5 рaз больше прoсмoтров) со скидкой 50% - <b>39 рyб.</b>
    <br>
    <b>«Поднять объявление»</b> <br>(в 3 рaзa больше прoсмoтров) со скидкой 50% - <b>15 рyб.</b>
    <br>
    <br>
    Поделитесь Вашим объявлением в Twitter, Одноклассниках, <br>ВКонтакте, Facebook, Google+ (бесплатно)<br>
    (в 2 раза больше просмотров Вашего объявления)
</div>
<br>
<br>
<br>
<a href="http://zaymi..ru">
    <img src="http://.ru/icon/975699f984a43a0dd9959d35bde0dbd9.gif">
</a>
<br>
<br> 
<div style="color: #666">
    Мы предлагаем вам открыть собственный Магазин на .ru
    <br>
    с подробной информацией о себе и своей компании.
    <br>
    Магазин — это один из самых эффективных способов
    <br>
    быстро найти покупателей.
    <br>
    Ваш товар смогут увидеть тысячи потенциальных<br> покупателей каждый месяц.
    <br>
    Акция на открытие магазина 199 рублей в месяц*
    <br>
    *Места ограничены.
</div>
<br>
<br>
<p>С уважением,<br> Администрация сайта <a href="'.dir_top().'">'.dir_top().'</a></p>';
 
$transport = Swift_MailTransport::newInstance();
            
$mailer = Swift_Mailer::newInstance($transport);
 
# Создание сообщения
$message = Swift_Message::newInstance('Ваше объявление добавлено на сайт')
    ->setFrom([
        $rru['email'] => 'Александр'
    ])
    ->setTo($data['email'][1])
    ->setBody($message, 'text/html');
 
if ($mailer->send($message)) {
    // Сообщение отправлено
} else {
    // Сообщение не отправлено`
}
?>
Добавлено через 1 минуту
Только HTML-шаблон лучше вынести в отдельный файл и подключать его в скрипте.
1
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 33
05.03.2017, 15:02  [ТС] 16
Спасибо большое, завтра протестирую
0
Эксперт PHP
4374 / 3257 / 1061
Регистрация: 06.01.2011
Сообщений: 9,418
05.03.2017, 15:44 17
Лучший ответ Сообщение было отмечено Александр454545 как решение

Решение

Хотя знаете даже как можно... Создаём такую функцию (поместите её в какой-то файл с функциями-помощниками, чтобы они были доступны по всей системе):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if (!function_exists('mailer')) {
    
    /**
     * Отправка письма с помощью SwiftMailer
     * 
     * @return boolean
     */
    function mailer($message, Closure $callback)
    {
        # Создание объекта шлюза отправки
        $transport = Swift_MailTransport::newInstance();
            
        # Создание объекта отправителя
        $mailer = Swift_Mailer::newInstance($transport);
        
        # Создание объекта сообщения
        $message = Swift_Message::newInstance()->setBody($message, 'text/html');
 
        call_user_func_array($callback, compact('message'));
        
        return $mailer->send($message);
    }
}
Так будет лучше, чтобы не дублировать один и тот же код инициализации SwiftMailer'а. А отправляйте так:
PHP
1
2
3
4
5
6
7
8
9
$message = 'тут текст сообщения, как обычно';
 
mailer($message, function($message) use($rru, $data) {
    $message->setFrom([
        $rru['email'] => 'Александр'
    ])
    ->setSubject('Ваше объявление добавлено на сайт')
    ->setTo($data['email'][1]);
});
И в том, первом скрипте, также поменяйте.
1
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 33
06.03.2017, 14:17  [ТС] 18
Вот у меня еще последний шаблон остался , как здесь быть?

Добавлено через 1 минуту
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?
require_once('/var/www/domains/.ru/connect/connect.php');
require_once('/var/www/domains/.ru/lib/lib.php');
 
$base='http://.ru/';
$them=' текст ';
$mess=' 
текст
 
        
        ';
        
        
        
$adm='<br><br>С уважением, администрация сайта .ru
 
 
 
 
';
 
 
    $r = mysql_query("SELECT * FROM board WHERE 
    id_akk > 0 AND
    (data1 - INTERVAL 339 DAY > NOW()) AND 
    (data1 - INTERVAL 340 DAY < NOW())
    ");
    while($rr=mysql_fetch_array($r))    
        {
        $arr[$rr['email']] .= '<br><br><br><br>Ссылка на Ваше объявление N 13'.$rr['id'].' - <a href="'.$base.'items/'.$rr['zag_url'].'_'.$rr['id'].'">'.$rr['zag'].'</a><br>';
        }
        
    if($arr)
        {
        foreach($arr as $index=>$ar)
            {
            @mail_utf8($index, $them, $mess.$ar.$adm, $rru['email']); 
            }
        }
?>
Добавлено через 22 часа 7 минут
Второй работает, спасибо
0
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 33
08.03.2017, 13:47  [ТС] 19
С последним не получится, да?
0
Эксперт PHP
4374 / 3257 / 1061
Регистрация: 06.01.2011
Сообщений: 9,418
08.03.2017, 14:00 20
Почему не получится? В цикле вызывайте функцию, которую тут показал: SMTP отправка писем с авторизацией
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2017, 14:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

SMTP отправка писем
Задумался, а как сделать отправку на чистом C++. Перерыл всё... И ничего, нет, они есть, но на...

Отправка писем через smtp
&lt;?php ini_set( 'html_errors', false ); $_POST = 'mymail@yandex.ru'; - почта, куда придет письмо...

Отправка писем по протоколу SMTP
Мне нужен простой способ отправлять email письма прямо из приложения в фоновом режиме. Я нашёл один...

Не работает отправка писем по SMTP на windows 7
IdSMTP-&gt;Host = &quot;smtp.&quot; + scbServ-&gt;Text.LowerCase(); IdSMTP-&gt;UserId = sedLog-&gt;Text; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.