Asked  1 Year ago    Answers:  5   Viewed   14 times

I am using the phpmailer and I want to send it to multiple of emails at once, by using for loop. This is my current coding:

require 'phpmailer/PHPMailerAutoload.php';
$mail = new PHPMailer;                       
$mail->isSMTP();                                      // Set mailer to         use SMTP
$mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'yyy.com';                 // SMTP username
$mail->Password = 'yyy';                           // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                    // TCP port to connect to
$person = array(0 => 'xxx.com', 'xxx2.com');
for ($x = 0; $x < 2; $x++) {
$mail->addAddress($person[$x]); 
}
$mail->setFrom('yyy.com'); 
$mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body    = "xxx";
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}  

Right now, the code works, but, when you check at "TO" at your email client, it also outputs OTHER emails, included alongside - and I don't want that. It's like, when you email to xxx.com, xxx2.com can see at his "TO" field, saying TO <name1> <xxx.com>, <name2> <xxx2.com>. How do I avoid that ? Should I create a loop starting from $mail = new PHPMailer; ?

 Answers

3

Here is another possible way without re-creating the Class each time.

<?php

require 'phpmailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();                                      // Set mailer to         use SMTP
$mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'yyy.com';                 // SMTP username
$mail->Password = 'yyy';                           // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                    // TCP port to connect to
$person = array(0 => 'xxx.com', 'xxx2.com');

$mail->setFrom('yyy.com');
$mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body    = "xxx";
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

$errors = [];
for ($x = 0; $x < 2; $x++) {
    $mail->addAddress($person[$x]);
    if(!$mail->send()) {
        $errors[] = 'Message could not be sent. Mailer Error: ' . $mail->ErrorInfo;
    }
    $mail->clearAddresses();
}

if(empty($errors)) {
    // success
} else {
    // handle errors
}

Using $mail->clearAddresses(); within the loop.

Thursday, April 1, 2021
 
5

You could check your current working directory, like this:

echo getcwd();

If you do so, you will see which is your active folder. The next thing you need to do is to check whether there is a PHPMailer-master folder inside your active folder (case-sensitive if you are using Linux). If it does not exist, then you will need to point to the right location instead or to create the folder and copy the file(s) into it. If it exists, check whether you have the necessary privileges and whether there is a file called PHPMailerAutoload.php inside that folder (again, case-sensitive if you are using Linux).

Saturday, May 29, 2021
 
Anax
 
1

Encoding is not a variable: $this->Encoding

Saturday, May 29, 2021
 
2

If they have the same keys you can just loop through the keys and use them to index the arrays using array_keys:

foreach(array_keys($array_one) as $key) {
    // do something with $array_one[$key] and $array_two[$key]
}

If you're worried about some keys not existing you can try (e.g.) array_key_exists($key,$array_two).

Thursday, July 29, 2021
4

You haven't posted this code that lets me make this a complete conclusion, but from the Exception and the way you've defined an overriding class inside a function, you probably have class.phpmailer.php loading every time like this:

require('class.phpmailer.php');

or

include('class.phpmailer.php');

You should change that line to

require_once('class.phpmailer.php');

The reason you need to change it to require_once is so that PHP will not load the class file the second time when you try to create the new/second PHPMailer class. Otherwise, the line class PHPMailer throws the __clone() exception.

Thursday, August 19, 2021
 
Only authorized users can answer the question. Please sign in first, or register a free account.
Not the answer you're looking for? Browse other questions tagged :