问题
So:
// Setup mail class, recipients and body
$mailer->AddAttachment(\'/home/mywebsite/public_html/file.zip\', \'file.zip\');
The AddAttachment function has four arguments:
AddAttachment(PATH_TO_FILE, FILENAME, ENCODING, HEADER_TYPE)
I used to use xmail() and when I added a attachment here, I passed the filename and the content, that should be in it.
Like this:
$xmail->addAttachment(\'myamazingfile.pdf\', $content);
How can I make it work the same way, so when i call AddAttachment()
from the PHPmailer class, I can either pass the same or something like it, so I dont need to have a actual file on my server to send?
回答1:
AddStringAttachment($string,$filename,$encoding,$type)
eg
$mail = new PHPMailer();
$mail->AddStringAttachment($string,$filename,$encoding,$type);
http://phpmailer.worxware.com/index.php?pg=tutorial#3
回答2:
since that AddAttachment() function is expecting a path rather than byte data, you should do a php convert to temp file function and then pass that path string into your function
$prefix = 'ConvertMediaArgs_'.time().'_';
$tempfile = tempnam( $this->tempdir, $prefix );
// Args file create failure: kill script with TEMPFILEFAIL error
if($tempfile === false) {
die('file could not be created');
}
// Write args as Key=Val (\n) to file
$fullpath = $this->tempdir.$tempfile;
$content = $someContent // <---------------- this is your file's data
$handle = fopen( $tempfile, "w");
fwrite( $handle, $content );
// $fullpath is the path you wanna pass to your function
$xmail->addAttachment( $fullpath, $content );
回答3:
$mail->addStringAttachment($content, $filename);
works very well for me.
For full reference: http://phpmailer.github.io/PHPMailer/classes/PHPMailer.PHPMailer.PHPMailer.html#method_addStringAttachment
来源:https://stackoverflow.com/questions/11164167/phpmailer-attachment-doing-it-without-a-physical-file