6

I know how to read a file on the server and attach it to an email in PHP, but I wanted to know if I could attach a file that is created by my script but not created on the server (kinda like a temp file).

So create file in memory and attach it to email.

Bonus: might need to create multiple files as well, would this be too much for the server to handle? I'm not talking GB's but like 5 files with 1000 lines each?

Phill Pafford
  • 83,471
  • 91
  • 263
  • 383

1 Answers1

11

Yes you can do that, as long as whatever email library you're using supports it. If you're not using one, you should be!
No, 5 files won't be too much for your server unless you bought it in 1993.

Hopefully your lib won't need a file reference - you can do something like:

$myEmail->attachData('file.name', 'mime/type', $data);

If it does need a file path then you could use a php://memory file:

 $f = fopen('php://memory/myfile', 'w');
 fwrite($f, '...');
 fclose($f);

$myEmail->attach('php://memory/myFile');
Greg
  • 316,276
  • 54
  • 369
  • 333
  • How would I get the file reference when doing something like this? – Phill Pafford Oct 05 '09 at 20:04
  • AntonioCS is has been the excepted answer since October 5, 2009. Did you post this comment in error? – Phill Pafford Jan 21 '10 at 16:08
  • 1
    are you sure about that usage? PHP documentation isn't great for these wrappers - and i tried using 'php://memory/foo' and i get 'invalid url' errors on fopen – HorusKol Jun 07 '10 at 03:25
  • In PHPMailer the method is AddStringAttachment(). You can read more about it here http://phpdocs.epesi.org/PHPMailer/PHPMailer.html#methodAddStringAttachment – Ivo Pereira Jul 12 '13 at 09:54