Необходимо всегда бросать класс исключений, полученный из станд.:: исключение. Это позволяет определенную непротиворечивость Вашему интерфейсу и позволяет больше гибкости клиентам этих методов или функций. Например, если Вы хотите добавить выгоду весь обработчик, Вы можете добавлять
catch(std::exception& e)
блок и делаться с ним. (Хотя часто Вы не будете мочь сойти с рук это, если Вы не будете управлять всем кодом, который может бросить).
я склонен выдавать только исключения, обеспеченные стандарт (т.е. станд.:: runtime_error), но если Вы хотите предоставить дополнительную гранулярность своим обработчикам, необходимо не стесняться получать собственное из станд.:: исключение. См. FAQ C++, облегченный .
кроме того, необходимо бросить временный файл и поймать его ссылкой (для предотвращения копии ctor быть вызванными на сайте выгоды). Бросок указателей также осужден, так как неясно, кто должен очистить память. C++ FAQ, Облегченный соглашения с этим также.
Хорошим способом (из по этой ссылке ), сначала расширьте PHPMailer и установите значения по умолчанию для вашего сайта:
require("class.phpmailer.php");
class my_phpmailer extends phpmailer {
// Set default variables for all new objects
var $From = "from@example.com";
var $FromName = "Mailer";
var $Host = "smtp1.example.com;smtp2.example.com";
var $Mailer = "smtp"; // Alternative to IsSMTP()
var $WordWrap = 75;
// Replace the default error_handler
function error_handler($msg) {
print("My Site Error");
print("Description:");
printf("%s", $msg);
exit;
}
// Create an additional function
function do_something($something) {
// Place your new code here
}
}
Затем включите приведенный выше сценарий, где это необходимо (в этом примере это называется mail.inc.php
) и используйте вновь созданный класс my_phpmailer
где-нибудь на своем сайте:
require("mail.inc.php");//or the name of the first script
// Instantiate your new class
$mail = new my_phpmailer;
// Now you only need to add the necessary stuff
$mail->AddAddress("josh@example.com", "Josh Adams");
$mail->Subject = "Here is the subject";
$mail->Body = "This is the message body";
$mail->AddAttachment("c:/temp/11-10-00.zip", "new_name.zip"); // optional name
if(!$mail->Send())
{
echo "There was an error sending the message";
exit;
}
echo "Message was sent successfully";
Я ничего не знаю о PHPMailer, но рекомендую использовать Zend_Mail . Вот простой пример с вложением:
$mail = new Zend_Mail();
$mail->setBodyText('This is the text of the mail.');
$mail->createAttachment($myImage,
'image/gif',
Zend_Mime::DISPOSITION_INLINE,
Zend_Mime::ENCODING_8BIT);
$mail->setFrom('somebody@example.com', 'Some Sender');
$mail->addTo('somebody_else@example.com', 'Some Recipient');
$mail->setSubject('TestSubject');
$mail->send();
Он, вероятно, делает все, что вы хотите (вложения, HTML, конфигурация SMTP, ...). По умолчанию он использует sendmail
, как и функция mail ()
, поэтому вам не нужно настраивать ничего вроде SMTP, если он вам не нужен.
Он также имеет очень хорошая документация, поэтому у вас не будет проблем с поиском примеров.