我正在尝试使用带附件的PEAR邮件包发送带有PHP的电子邮件。电子邮件成功发送了我从互联网上获得的代码。但是,附件不会被发送或附加。我哪里出错了,下面是我的代码。
<?php
require_once "Mail.php";
require_once "Mail/mime.php";
$from = "<my.name@company.com>";
$to = "<myname@gmail.com>";
$subject = "Testing email from PHP with attachment";
$body = "Testing email from PHP with attachment";
$file = "invoices/PRINV7_3.pdf";
$host = "host";
$port = "25";
$username = "username";
$password = "password";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$mime = new Mail_mime();
if ($mime->addAttachment($file,'application/pdf')){
echo "attached successfully! </br>";
} else {
echo "Nope, failed to attache!! </br>";
}
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
?>
答案 0 :(得分:7)
我没有检查过这段代码,所以如果不行,我很抱歉
include 'Mail.php';
include 'Mail/mime.php';
$text = 'Text version of email';
$html = '<html><body>HTML version of email</body></html>';
$file = '/home/richard/example.php';
$crlf = "\n";
$hdrs = array(
'From' => 'you@yourdomain.com',
'Subject' => 'Test mime message'
);
$host = "host";
$port = "25";
$username = "username";
$password = "password";
$mime = new Mail_mime(array('eol' => $crlf));
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$mime->addAttachment($file, 'text/plain');
$body = $mime->get();
$hdrs = $mime->headers($hdrs);
$mail = & Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail->send('postmaster@localhost', $hdrs, $body);
答案 1 :(得分:2)
我认为您需要将$mime
对象的标题添加到$headers
$attachmentheaders = $mime->headers($headers);
然后更改您的邮件:
$mail = $smtp->send($to, $attachmentheaders, $body);
这是一个可能有用的教程: http://www.html-form-guide.com/email-form/php-email-form-attachment.html
答案 2 :(得分:0)
<?php
include 'Mail.php';
include 'Mail/mime.php' ;
$text = 'Text version of email';
$html = '
<html>
<body>HTML version of email</body>
</html>
';
$file = '/home/richard/example.php';
$crlf = "\n";
$hdrs = array(
'From' => 'you@yourdomain.com',
'Subject' => 'Test mime message'
);
$mime = new Mail_mime(array('eol' => $crlf));
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$mime->addAttachment($file, 'text/plain');
$body = $mime->get();
$hdrs = $mime->headers($hdrs);
$mail =& Mail::factory('mail');
$mail->send('postmaster@localhost', $hdrs, $body);
?>
答案 3 :(得分:-1)
这是来自我的某个应用的代码:
/**
*
* @param type $recipient
* @param type $subject
* @param type $message
* @param type $attachment
*
* To make this mail PEAR work, I needed to do:
* pear install mail
* pear install Net_SMTP
* pear install Mail_Mime
*
*/
public function sendmail($recipient, $subject, $message, $attachment = '') {
require_once "Mail.php";
require_once "Mail/mime.php";
$from = "Dispatcher <server@mymailserver.com>";
$host = "smtp.mymailserver.com";
$port = "587";
$username = "mailuser";
$password = "password";
$headers = array ('From' => $from, 'To' => $recipient, 'Subject' => $subject);
if ($attachment != '') {
$crlf = "\n";
$mime = new Mail_mime($crlf);
$mime->setTXTBody($message);
$mime->addAttachment($attachment, 'application/pdf');
$body = $mime->get();
$headers = $mime->headers($headers);
} else {
$body = $message;
}
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$smtp->send($recipient, $headers, $body);
}