PHPMailer не могу вставить переменную AddAddress

ppbinag

Новичок
Если вместо переменной, получаемой из базы данных $f, прописать строчку AddAddress('my_email'), все работает письма отправляются и приходят.
Если пишу так:
[CODE]$mail->AddAddress($f[email]);[/CODE]
Выскакивает ошибка:
Mailer Error: Language string failed to load: instantiate
если посмотреть через var_damp, то адрес получается вида "my_email", то есть в двойных ковычках.
Как правильно вставить переменную?
 

vasinsky

Новичок
Недавно столкнулся с такой же проблемой, все нормально работала и вдруг Mailer Error: Language string failed to load: instantiate. 2 дня разбирал по частям скрипт, потом парил мозги компании предоставляющей хостинг, и в итого выяснили следующее. Отправлять и принимать сообщения ($mail->From и $mail->AddAddress) нужно с доменных адресов. К примеру ваш сайт sait.ru отправка с адреса [email protected] прием на [email protected]. Как только я заменил адреса google на доменные, все пошло.
 

ppbinag

Новичок
не работает на любых например [email protected] если они в переменной, если прописывать вручную то все работает
 
Последнее редактирование:

vasinsky

Новичок
по домену - это значить если php mailer запускается на сайте по адресу yourdomen.com - то мыло ответа (FROM) должно быть [email protected]

прописать строчку AddAddress('my_email'), все работает письма отправляются и приходят.
как я это пропустил)))

я по гуглу сужу - чё он говорит. под рукой этой библии нет - ну глянь в исходника - чё за екзепшен - когда он его бросает то
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
ppbinag, включи вывод ошибок и все сразу станет ясно, что ты кавычки забываешь.
 

ppbinag

Новичок
Ставлю '$f', '.$f[email].', $f['email'] та же самая ошибка. Если такая конструкция '".$f[email]."' или '.$f['email'].' ошибка не выскакивает но письмо не доходит
 

vasinsky

Новичок
в одинарных кавычках - php игнорируется

и вообще - ключи в массивах указываются в кавычках

$f [ 'email ' ]
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
var_damp? точно var_damp?

Так что он выводит то? Какие кавычки?
 

ppbinag

Новичок
Извиняюсь ошибся var_dump($f) выводит емаил в двойных ковычках
 

vasinsky

Новичок
да какая разница в каких кавычках - это строка, и если не ругается на валидацию - это тут вообще не о том.

мыло по домену сайта пробовал поставить в FROM ?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну удачи в решении. Кстати ошибка гуглится вполне себе неплохо. Наводит на определенные мысли про адреса From и AddAddress и настройки почтовика.
 

ppbinag

Новичок
Не понял я же адрес на который отправляются письма указываю в AddAddress
 

С.

Продвинутый новичок
Покажи уже, что выводит твой var_dump($f). Только не в твоем вольном пересказе, а точно.
 

ppbinag

Новичок
Так получаю из базы данных переменную
Код:
$rs = mysql_query("SELECT * FROM customers WHERE customer_id='25'");
for ($c=0; $c<mysql_num_rows($rs); $c++)
{
$f = mysql_fetch_assoc($rs);
//echo "$f[email] $f[name] <br>";
}
$email_admin = $f[email];
 

С.

Продвинутый новичок
Ты врешь. Либоо в результате var_dump($f), либо в коде.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
ppbinag, должно быть не
PHP:
$f[email]
а

PHP:
$f['email']
PS: если ставишь этот адрес просто, без переменной, почта отсылается нормально?
 

ppbinag

Новичок
Поставил
Код:
$f['email']
, выскакивает ошибка Mailer Error: Language string failed to load: instantiate, var_dump показывает тоже самое.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
ppbinag, есть хороший способ проверить все, что тебе надо.

Пишем 2 куска кода. В первом случае вместо всех переменных ставим адреса, как в базе данных, но ручками, во втором - переменные. И смотрим, работают ли оба варианта. Код постим сюда, оба кусочка.
 

ppbinag

Новичок
Если прописывать AddAddress('[email protected]') то все работает:
Код:
    <h2>Оставить заявку</h2>

<?php
function show_form()
{
?>
<form action="" method=post enctype="multipart/form-data">

<div style="padding-right:20px; padding-left: 40px;">
<table border="0">
    <tr>
        <td  style="width:158px">Ваше имя <span style="color: red">*</span>:</td>
        <td><input type="text" name="name" style="width:350px" value=""></td>
    </tr>
    <tr>
        <td>E-mail <span style="color: red">*</span>:</td>
        <td><input type="text" name="email" style="width:350px" value=""></td>
    </tr>
    <tr>
        <td>Телефон:</td>
        <td><input type="text" name="tel" style="width:350px" value=""></td>
    </tr>
    <tr>
        <td>Тема:</td>
        <td><input type="text" name="title" style="width:350px" value=""></td>
    </tr>
    <tr>
        <td>Описание объекта:</td>        <td><textarea name="mess" style="width:350px" rows="10"></textarea></td>
    </tr>
        <tr>
        <td>Добавить фотографию: <br>
        </td>
        <td>
            <input name="attachimage" type="file" size="28">
        </td>
    </tr>
    <tr>
        <td>Добавить архив: <br>
        </td>
        <td>
            <input name="attachfile" type="file" size="28">
        </td>
    </tr>
    <tr>
        <td colspan="2" style="color: red">
            * - поля обязательные для заполнения<br>
            Для добавления нескольких фото воспользуйтесь функцией "Добавить архив" прикрепив архив с фото.
        </td>
    </tr>
    <tr>
        <td colspan="2" style="text-align:center; font-size: 16px">
            <br><br>
            <input type="submit" value="Отправить" name="submit">
        </td>
    </tr>
</table>
</div>

</form> 
<?
}
$rs = mysql_query("SELECT * FROM customers WHERE customer_id='25'");
for ($c=0; $c<mysql_num_rows($rs); $c++)
{
$f = mysql_fetch_array($rs);
//echo "$f[email] $f[name] <br>";
}
$email_admin = $f[email];
var_dump($email_admin);
function complete_mail() {
        // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и  substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменных $_POST['mess'], $_POST['name'], $_POST['tel'], $_POST['email'] все аналогично
        $_POST['title'] =  substr(htmlspecialchars(trim($_POST['title'])), 0, 1000);
        $_POST['mess'] =  substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000);
        $_POST['name'] =  substr(htmlspecialchars(trim($_POST['name'])), 0, 30);
        $_POST['tel'] =  substr(htmlspecialchars(trim($_POST['tel'])), 0, 30);
        $_POST['email'] =  substr(htmlspecialchars(trim($_POST['email'])), 0, 50);
        // если не заполнено поле "Имя" - показываем ошибку 0
        if (empty($_POST['name']))
            output_err(0);
        // если неправильно заполнено поле email - показываем ошибку 1
        if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['email']))
            output_err(1);
        // если не заполнено поле "Сообщение" - показываем ошибку 2
        if(empty($_POST['mess']))
            output_err(2);
        // обратите внимание, теперь мы можем писать красивые письма, с помощью html тегов ;-)
        $mess = '
<b>Имя отправителя:</b>'.$_POST['name'].'<br />
<b>Контактный телефон:</b>'.$_POST['tel'].'<br />
<b>Контактный email:</b>'.$_POST['email'].'<br />
'.$_POST['mess'];

        // подключаем файл класса для отправки почты
        require 'class.phpmailer.php';
        $mail = new PHPMailer();
        $mail->From = '[email protected]';      // от кого
        $mail->FromName = 'palmira.center';  // от кого
        $mail->AddAddress($email_admin); // кому - адрес, Имя
        $mail->IsHTML(true);        // выставляем формат письма HTML
        $mail->Subject = $_POST['title'];  // тема письма

        // если был файл, то прикрепляем его к письму
        if(isset($_FILES['attachfile'])) {
                if($_FILES['attachfile']['error'] == 0){
                    $mail->AddAttachment($_FILES['attachfile']['tmp_name'], $_FILES['attachfile']['name']);
                }
        }
        // если было изображение, то прикрепляем его в виде картинки к телу письма.
        if(isset($_FILES['attachimage'])) {
                if($_FILES['attachimage']['error'] == 0){
                    if (!$mail->AddEmbeddedImage($_FILES['attachimage']['tmp_name'], 'my-attach', 'image.gif', 'base64', $_FILES['attachimage']['type']))
                        die ($mail->ErrorInfo);
                    $mess .= '<br /><img src="cid:my-attach" border=0><br />';
                }
        }
        $mail->Body = $mess;

        // отправляем наше письмо
        if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
        echo 'Спасибо! Ваша заявка отправлена. В скором времени с Вами свяжется наш консультант.';
}

function output_err($num)
{
    $err[0] = 'ОШИБКА! Не введено имя.';
    $err[1] = 'ОШИБКА! Неверно введен e-mail.';
    $err[2] = 'ОШИБКА! Не введено сообщение.';
    echo '<p>'.$err[$num].'</p>';
    show_form();
    exit();
}

if (!empty($_POST['submit'])) complete_mail();
else show_form();
?>
 
Сверху