PHPMailer checks is_file
for every attachment (in addAttachment
function, in class.phpmailer.php file):
if (!@is_file($path)) {
throw new phpmailerException($this->lang('file_access') . $path, self::STOP_CONTINUE);
}
My problem is that I can make work is_file
only giving full local path to file, not URLs:
is_file('C:/wamp/www/myFolder/rocks.png'); //True
is_file('http://localhost/myFolder/rocks.png'); //False :(
So I can't attach any file from the remote server.
What am I doing wrong?? It can be a permission issue?
EDIT:
I know that there are other ways to check if file exists.
But is_file
is in the PhpMailer library, I prefer to not touch it and I want to know if it's possible to make it work using its methods.
Thanks.
It doesn't need a workaround, you're just using a function explicitly intended for local files on a remote resource. This is a deliberate choice by PHPMailer because it dos not want to act as an HTTP client – that's an entirely separate job better handled by other code. To attach a remote resource without involving local files, just do this:
$mail->addStringAttachment(file_get_contents($url), 'filename');
While this makes the HTTP request your responsibility (as PHPMailer intends), I would not recommend this direct inline approach because it makes error handling more difficult (e.g. if the URL fails to respond).
This is essentially a duplicate of this question.