0

This question already has an answer here:

I have an email system that I am making in a WordPress plugin to send the emails with this code:

include(PLUGIN_DIR.'config/class_phpmailer.php');

$email = new PHPMailer();

$email->From      = get_option('admin_email');
$email->FromName  = 'my name';
$email->Subject   = $subject;
$email->Body      = $body;

foreach($emails as $mail) {
    if(is_email($mail)) {
        $email->addAddress($mail);
    }
}
if($name) {
    $att = PLUGIN_DIR.'uploads/'.date('Ymd').'_'.$name;
    $email->AddAttachment($att);
}

// check if email is sent or not
if(!$email->Send()) {
    echo "Message was not sent <br />PHPMailer Error: " . $email->ErrorInfo;
}
else {
    echo "Message has been sent";
    $_POST = array();
}

This works great. Tested it online and sends to all the tested emails.

Can I make it like this? I mean, with phpmailer class not native to WP. Is this wrong? Is it best to use native WP phpmailer? If so, how can I do it?

Thanks in advance.

marked as duplicate by fuxia Jun 26 '17 at 18:52

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • WordPress already uses PHPMailer under hood - what do you expect from implementing this on your own? Just use wp_mail() and don't worry – kero Jun 26 '17 at 10:49
  • 1
    You didn't mention email volume; if more than "nominal" then consider using a separate SMTP service; there are plenty of good SMTP mailer plugins for WP. Getting consistent successful email delivery is part art and part science. – C C Jun 26 '17 at 12:24
  • You may as well use the built in one. its basically PHP Mailer built into the core. – Andi Wilko Jun 26 '17 at 12:40
  • @C C, you talk about email volume. this is for an mailing list im am making and i have up to 500 emails addresses. what do you mean by using separate SMTP service? tks. – eskimopest Jun 26 '17 at 15:07
4

WordPress offers its own mailing system. I suggest you use that instead of PHP's native mail.

wp_mail accepts five arguments:

wp_mail( $to, $subject, $message, $headers, $attachments );

So your code can be written this way:

// Set the headers
$headers[] = 'From: ' . get_option('admin_email');
// Add the addresses to an array
foreach($emails as $mail) {
    if(is_email($mail)) {
        $to[] = $mail;
    }
}
// Add the attachment
if($name) {
    $att[] = PLUGIN_DIR.'uploads/'.date('Ymd').'_'.$name;
}
// Send the emails
$results = wp_mail( $to, $subject, $body, $headers, $att );
// Output the results
echo $results;

Simple and short.

Not the answer you're looking for? Browse other questions tagged or ask your own question.