У меня есть класс рассылки PHP. Проблема в том, что электронное письмо не содержит HTML, а просто текст. Держу пари, что другие программисты видят мою ошибку … надеюсь, что некоторые из вас могут!
Код для вызова моих функций:
GhostMailer::setHTML(true);
GhostMailer::setSender(Input::get('emailfrom'));
GhostMailer::addRecipient(Input::get('emailto'));
GhostMailer::setSubject(Input::get('subject'));
GhostMailer::setReturnAddress(Input::get('emailfrom'));
GhostMailer::setMessage(Input::get('email'));
GhostMailer::getHeaders();
GhostMailer::send();
send()
функция:
public static function send ()
{
$message = self::$message;
$head = "";
foreach ( self::$header as $key => $value ) { $head.= $key . ': ' . $value . self::EOL; }
// If attachments given
if ( count ( self::$attachments ) > 0 )
{
$separator = md5 ( time() );
self::setHeaders ( 'Content-Type', 'multipart/mixed; boundary="' . $separator . '"' );
$head = "";
foreach ( self::$header as $key => $value ) { $head.= $key . ': ' . $value . self::EOL; }
$head.= "Content-Transfer-Encoding: 7bit" . self::EOL;
$head.= "This is a MIME encoded message." . self::EOL . self::EOL;
// Preparing the message with proper formatting, charsets, content-types and encoding.
$head .= "--" . $separator . self::EOL;
$head .= "Content-Type: text/" . ( self::$isHTML ? 'html' : 'plain' ) . "; charset=\"iso-8859-1\"" . self::EOL;
$head .= "Content-Transfer-Encoding: 8bit" . self::EOL . self::EOL;
$head .= $message . self::EOL . self::EOL;
$head .= "--" . $separator . self::EOL;
$message = "";
// Attach all given attachments to the mail
foreach ( self::$attachments as $attached )
{
$tmp = explode ( "/", $attached );
$filename = end ( $tmp );
$file_size = filesize ( $attached );try // Try to open the file
{
$handle = fopen ( $attached, "r" );
$content = fread ( $handle, $file_size );
fclose ( $handle );
}
catch ( Exception $e )
{
die ( "[GhostMailer] FATAL ERROR IN ATTACHMENTS: Could not open file; Stacktrace: " . $e->getMessage () );
}
$content = chunk_split ( base64_encode ( $content ) );
// attachment
$head .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"" . self::EOL;
$head .= "Content-Transfer-Encoding: base64" . self::EOL;
$head .= "Content-Disposition: attachment" . self::EOL . self::EOL;
$head .= $content . self::EOL . self::EOL;
$head .= "--" . $separator . self::EOL;
}
}
foreach ( self::$recipients as $recipient )
{
if ( ! mail (
$recipient,
self::$subject ,
$message ,
$head
)
) {
return false;
}
}
return true;
}
Я думаю, что если вы удалите следующую строку:
$message = "";
Это должно работать как ожидалось. В противном случае, пожалуйста, предоставьте свой код метода setMessage.
Изменить относительно OP Комментарий:
Если вы хотите удалить HTML-теги, посмотрите на http://php.net/manual/en/function.strip-tags.php
$stripedMessage = strip_tags($message);
А затем отправьте $ stripedMessage вместо $ message ;.
Других решений пока нет …