27

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?

Karem
  • 17,615
  • 72
  • 178
  • 278

2 Answers2

54
AddStringAttachment($string,$filename,$encoding,$type)

eg

$mail = new PHPMailer();
$mail->AddStringAttachment($string,$filename,$encoding,$type);

https://phpmailer.github.io/PHPMailer/classes/PHPMailer-PHPMailer-PHPMailer.html#method_addStringAttachment

Marki555
  • 6,434
  • 3
  • 37
  • 59
goat
  • 31,486
  • 7
  • 73
  • 96
0

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 );
Kristian
  • 21,204
  • 19
  • 101
  • 176