Код отправляется 2 раза без правильного изображения

Я попробовал этот код из сообщения, но этот код отправляет два электронных письма в одном запуске файла.

Файл электронной почты отправляет электронную почту два раза с использованием php mail функция

Подскажите что я делаю не так -

<?php
function mytextoverimage( $mytext ) {
$headurl = 'http://dummyimage.com/600x400/ffffee/00d5ff.jpg';
header('Content-type: image/jpeg');
$jpg_image = imagecreatefromjpeg($headurl);
$black = imagecolorallocate($jpg_image, 1, 1, 1);
$font_path = 'myfont/arial.ttf';
$text = $mytext;
imagettftext($jpg_image, 24, 0, 175, 85, $black, $font_path, $text);
imagejpeg($jpg_image);
imagedestroy($jpg_image);
}

$to = "[email protected]";
$subject = "This is a image conversion from Developer Zone";
$headers = "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$message = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>My Title</title>
</head>
<body>
<table width="100%" cellspacing="5" cellpadding="0" border="0" bgcolor="#f0f0f0" style="color:666666;text-align:left; font:12px Verdana, Geneva, sans-serif">
<tr>
<td >'.mytextoverimage('Developer').'</td></tr></table></body></html>';

    mail($to,$subject,$message,$headers); die;

Дайте мне знать, что я делаю неправильно, это правильный метод, который я использую -

<img src="'.mytextoverimage('Developer').'" />

Я перешел по этому URL-адресу, но трудно взломать любую справку с этой страницы - http://php.net/manual/en/function.imagejpeg.php

Я даже пытался сохранить этот метод mytextoverimage() в другом файле, но все равно не помогает, электронная почта отправляется дважды :(


person Trialcoder    schedule 28.12.2012    source источник
comment
Это может случиться, когда клиент собирает все электронные письма, приходящие для одного и того же пользователя, и сохраняет их в одной истории. Предположим, вы удалили все, что отправили себе, и проверили это снова.   -  person epsilones    schedule 31.12.2012
comment
@Newben, я пробовал даже это... очистка/удаление, но все равно не работает, если вы попробовали этот код, просто изменив $to = [email protected]; на почту вы точно лучше разберетесь в проблеме   -  person Trialcoder    schedule 31.12.2012
comment
Совет по отладке: Вставьте микровремя запроса ($_SERVER['REQUEST_TIME_FLOAT']) в сообщение электронной почты. Затем вы увидите, отправлено ли электронное письмо в одно и то же время или есть небольшая разница. Вы можете еще больше улучшить это с помощью сеанса, точно зная, когда отправляется более одного электронного письма, каким сценарием, каким именно запросом инициализируется.   -  person hakre    schedule 05.01.2013
comment
Какова твоя цель? Должно ли изображение быть встроено в ваше электронное письмо или храниться на вашем веб-сервере и просто ссылаться на него в электронном письме?   -  person Enno Gröper    schedule 06.01.2013
comment
@EnnoGröper На самом деле у меня есть динамический контент, который я хочу встроить поверх изображения (что-то вроде водяных знаков, но не совсем). У меня есть изображение и текст (имена пользователей), в то время как в точке кода я отправляю электронное письмо, содержащее это изображение. Если это gmail/yahoo, все в порядке. вещь   -  person Trialcoder    schedule 07.01.2013


Ответы (3)


Ваша функция mytextoverimage() ничего не возвращает - она ​​просто отправляет изображение в формате jpeg в браузер.

Я переработал ваш код для отправки того же изображения по электронной почте — обратите внимание, что отправляется только изображение, а не HMTL.

Если вы хотите отправить изображение как часть HTML-документа, вам нужно сделать еще один шаг и создать составное сообщение — проверьте Как прикрепить и показать изображение в почте с помощью php?

Это работает для Gmail на Iceweasel 10.0.11.

<?php
function mytextoverimage( $mytext )
{
    $headurl = 'http://dummyimage.com/600x400/ffffee/00d5ff.jpg';
    $jpg_image = imagecreatefromjpeg($headurl);
    $black = imagecolorallocate($jpg_image, 1, 1, 1);
    $font_path = 'myfont/arial.ttf';
    $text = $mytext;
    imagettftext($jpg_image, 24, 0, 175, 85, $black, $font_path, $text);
    ob_start(); //Get the image data from the output buffer
    imagejpeg($jpg_image);
    imagedestroy($jpg_image);
    return chunk_split(base64_encode(ob_get_clean())); //return the image data, encoded for email transfer
}

$to = "[email protected]";
$subject = "This is a image conversion from Developer Zone";
// --- Note the change from text/html to image/jpeg ---
$headers = "Content-type: image/jpeg;\r\n";
//$headers = "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'Content-Transfer-Encoding: base64' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$message = mytextoverimage('Developer');

    mail($to,$subject,$message,$headers); die;
person Jon Hulka    schedule 02.01.2013
comment
Первоначально код Swapnesh даже работал у меня, но ваш код намного лучше ... спасибо за решение ... очень хорошо продумано ... спасибо за все усилия :) - person Trialcoder; 07.01.2013

Да, вы делаете это неправильно. Функция Imagejpg возвращает и изображение, но вам нужен URL-адрес, чтобы поместить его в тег. Что вам нужно сделать, так это использовать почтовую программу SWIFT и отправить созданное вами изображение в качестве вложения к электронному письму. вы можете прочитать об этом здесь: http://swiftmailer.org/docs/messages.html

Было бы так:

 //Create the message
 $img = $message->embed(Swift_Image::fromPath('body1.jpg'));

 //Set the body
 $message->setBody(
   '<html>' .
   ' <head></head>' .
   ' <body>' .
   " <img src='$img'/>"
   ' </body>' .
   '</html>',

   'text/html' //Mark the content-type as HTML
 );
person Dracony    schedule 31.12.2012
comment
Пожалуйста, не меняйте правила игры. - person Gabriel Santos; 01.01.2013
comment
@GabrielSantos: На первый взгляд, я согласен. Но если пользователь 1594368 хочет вставить изображение в электронное письмо, ему придется использовать другие инструменты. Использование функции mail() — плохая идея для почты с несколькими пантомимами. Руководство по PHP рекомендует использовать PEAR::Mail_Mime. - person Enno Gröper; 06.01.2013
comment
@Dracony Я не хочу использовать для этого другой инструмент, хотя +1 за ваши усилия - person Trialcoder; 07.01.2013

Что касается моего вопроса, я решил его примерно так:

<?php
function myimagecreate( $name ) 
{
$headurl = 'http://dummyimage.com/600x300/f5ebf5/f2f2f7.jpg';
header('Content-type: image/jpeg');
$text = $name;
$name =$name.".jpg";
$filepath = 'http://MY_SITE_URL.com/'."myfont";
$jpg_image = imagecreatefromjpeg($headurl);
$black = imagecolorallocate($jpg_image, 1, 1, 1);
$font_path = 'myfont/Ayuma2yk.ttf';
imagettftext($jpg_image, 24, 0, 175, 85, $black, $font_path, $text);
imagejpeg($jpg_image,$name);
imagedestroy($jpg_image);
return $name;
}

$to      = '[email protected]';                
$subject = 'Swapnesh Sinha - For PHP GD Library';           
$message = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
            <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>Swapnesh Sinha</title>
            </head>
            <body>
            <table width="600px" bgcolor="#f0f0f0" style="color:666666;text-align:left; font:12px Verdana, Geneva, sans-serif">
            <tr>
            <td>
            <img src="http://MY_SITE_URL.com/'.myimagecreate('Swapnesh').'" style="display:block" />
            </td>
            </tr>
            </table>
            </body>
            </html>';
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: Swapnesh Sinha <[email protected]>'. "\r\n";

$bool = mail($to,$subject,$message,$headers);
if($bool)
echo "Email is sent successfully";
else
echo "Something is missing in the code, please check the code properly!!";          

?>

Просто сохраните код в любом корневом файле «Yourfile.php» и запустите.

Это создаст образ и сохранит его в корневую папку (вы также можете принудительно сохранить его в другом месте).

Перейдите также по этим двум ссылкам -

ССЫЛКА 1 ССЫЛКА 2

person swapnesh    schedule 01.01.2013