我使用的PHP代码在邮件中有附件选项。当我有一个附件时,一切都很好,但当我有两个或更多附件时,我只收到其中一个。此外,当邮件发送时,我有一个回声消息的问题,我没有收到任何消息。下面是我使用的代码:
<?php
if ($_SERVER['REQUEST_METHOD']=="POST"){
$to="mares.p@hotmail.com";
$subject="Online Prijava";
$from = stripslashes($_POST['ime'])."<".stripslashes($_POST['email_adresa']).">";
if(empty($_POST['ime']) || empty($_POST['email_adresa']))
{
$errors .= "'n Greska: nisu uneta sva obavezna polja";
}
$mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";
$tmp_name = $_FILES['fotokopija_uplatnice']['tmp_name'];
$type = $_FILES['fotokopija_uplatnice']['type'];
$file_name = $_FILES['fotokopija_uplatnice']['name'];
$size = $_FILES['fotokopija_uplatnice']['size'];
$message = "PODACI U PSU:
'n Razred: " .$_POST['razred']. "
'n Boja: " .$_POST['boja']. "
'n Tip dlake: " .$_POST['tip_dlake']. "
'n Velicina: " .$_POST['velicina']. "
'n Pol: " .$_POST['pol']. "
'n Visina: " .$_POST['visina']. "
'n Tezina: " .$_POST['tezina']. "
'n Ime psa: " .$_POST['ime_psa']. "
'n Broj pedigra: " .$_POST['broj_pedigrea']. "
'n Datum rodjenja: " .$_POST['datum_rodjenja']. "
'n Otac: " .$_POST['otac']. "
'n Broj pedigrea oca: " .$_POST['broj_pedigrea_oca']. "
'n Majka: " .$_POST['majka']. "
'n Broj pedigra majke: " .$_POST['broj_pedigra_majke']. "
'n Odgajivac: " .$_POST['odgajivac']. "
'n
'nPODACI O VLASNIKU
'n Ime: " .$_POST['ime']. "
'n Adresa: " .$_POST['adresa']. "
'n Grad: " .$_POST['grad']. "
'n Drzava: " .$_POST['drzava']. "
'n Telefon: " .$_POST['telefon']. "
'n Email adresa: " .$_POST['email_adresa'];
$headers = "From: $from'r'n";
if (file_exists($tmp_name)){
if(is_uploaded_file($tmp_name)){
$file = fopen($tmp_name,'rb');
$data = fread($file,filesize($tmp_name));
fclose($file);
$data = chunk_split(base64_encode($data));
}
$headers .= "MIME-Version: 1.0'r'n" .
"Content-Type: multipart/mixed;'r'n" .
" boundary='"{$mime_boundary}'"";
$message .= "'n'n'nThis is a multi-part message in MIME format.'n'n" .
"--{$mime_boundary}'n" .
"Content-Type: text/plain; charset='"iso-8859-1'"'n" .
"Content-Transfer-Encoding: 7bit'n'n" .
$message . "'n'n";
$message .= "--{$mime_boundary}'n" .
"Content-Type: {$type};'n" .
" name='"{$file_name}'"'n" .
//"Content-Disposition: attachment;'n" .
//" filename='"{$fileatt_name}'"'n" .
"Content-Transfer-Encoding: base64'n'n" .
$data . "'n'n" .
"--{$mime_boundary}--'n";
}
if (mail($to, $subject, $message, $headers))
{
echo '<div><center><h1>Prijava uspesno poslata.</h1></center></div>';
} else {
echo '<div><center><h1>Greska prilikom slanja prijave. Molimo pokusajte ponovo.</h1></center></div>';
}
}
?>
我遇到了一些问题。我用phpmailer
解决了这个问题<?php
require "classes/class.phpmailer.php"; // include the class name
$mail = new PHPMailer();
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->Host = 'xx';
$mail->Username = 'xxxx';
$mail->Password = 'xx';
$mail->Port = xxx;
$mail->setFrom('ixx@.123com','ixx@.123com');
$mail->addAddress('ixx@.123com','ixx@.123com');
$mail->AddAttachment("1.jpg"); //Attach a file here
$mail->AddAttachment("2.jpg"); //Attach a file here
$mail->AddAttachment("3.jpg"); //Attach a file here
$mail->AddAttachment("4.jpg"); //Attach a file here
$mail->MsgHTML("<b>Two Attachment. Great Job!.. <br/>"); //Put your body of the message you can place html code here
//send the message, check for errors
$mail->IsHTML(true);
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "SENDING";
}
?>
您可以使用外部SMTP,如mandrill或谷歌SMTP或您可以使用您的服务器SMTP。
这里有一个很好的phpmailer教程。
http://www.asif18.com/7/php/send-mails-using-smtp-in-php-by-gmail-server-or-own-domain-server/下面是有效的代码
<?php
if ($_SERVER['REQUEST_METHOD']=="POST"){
$to="mares.p@hotmail.com";
$subject="Online Prijava";
$from = stripslashes($_POST['ime'])."<".stripslashes($_POST['email_adresa']).">";
// generate a random string to be used as the boundary marker
$mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";
// now we'll build the message headers
$headers = "From: $from'r'n" .
"MIME-Version: 1.0'r'n" .
"Content-Type: multipart/mixed;'r'n" .
" boundary='"{$mime_boundary}'"";
// here, we'll start the message body.
// this is the text that will be displayed
// in the e-mail
$message = "PODACI U PSU:
'n Razred: " .$_POST['razred']. "
'n Boja: " .$_POST['boja']. "
'n Tip dlake: " .$_POST['tip_dlake']. "
'n Velicina: " .$_POST['velicina']. "
'n Pol: " .$_POST['pol']. "
'n Visina: " .$_POST['visina']. "
'n Tezina: " .$_POST['tezina']. "
'n Ime psa: " .$_POST['ime_psa']. "
'n Broj pedigra: " .$_POST['broj_pedigrea']. "
'n Datum rodjenja: " .$_POST['datum_rodjenja']. "
'n Otac: " .$_POST['otac']. "
'n Broj pedigrea oca: " .$_POST['broj_pedigrea_oca']. "
'n Majka: " .$_POST['majka']. "
'n Broj pedigra majke: " .$_POST['broj_pedigra_majke']. "
'n Odgajivac: " .$_POST['odgajivac']. "
'n
'nPODACI O VLASNIKU
'n Ime: " .$_POST['ime']. "
'n Adresa: " .$_POST['adresa']. "
'n Grad: " .$_POST['grad']. "
'n Drzava: " .$_POST['drzava']. "
'n Telefon: " .$_POST['telefon']. "
'n Email adresa: " .$_POST['email_adresa'];
// next, we'll build the invisible portion of the message body
// note that we insert two dashes in front of the MIME boundary
// when we use it
$message = "This is a multi-part message in MIME format.'n'n" .
"--{$mime_boundary}'n" .
"Content-Type: text/plain; charset='"iso-8859-1'"'n" .
"Content-Transfer-Encoding: 7bit'n'n" .
$message . "'n'n";
// now we'll process our uploaded files
foreach($_FILES as $userfile){
// store the file information to variables for easier access
$tmp_name = $userfile['tmp_name'];
$type = $userfile['type'];
$name = $userfile['name'];
$size = $userfile['size'];
// if the upload succeded, the file will exist
if (file_exists($tmp_name)){
// check to make sure that it is an uploaded file and not a system file
if(is_uploaded_file($tmp_name)){
// open the file for a binary read
$file = fopen($tmp_name,'rb');
// read the file content into a variable
$data = fread($file,filesize($tmp_name));
// close the file
fclose($file);
// now we encode it and split it into acceptable length lines
$data = chunk_split(base64_encode($data));
}
// now we'll insert a boundary to indicate we're starting the attachment
// we have to specify the content type, file name, and disposition as
// an attachment, then add the file content.
// NOTE: we don't set another boundary to indicate that the end of the
// file has been reached here. we only want one boundary between each file
// we'll add the final one after the loop finishes.
$message .= "--{$mime_boundary}'n" .
"Content-Type: {$type};'n" .
" name='"{$name}'"'n" .
"Content-Disposition: attachment;'n" .
" filename='"{$fileatt_name}'"'n" .
"Content-Transfer-Encoding: base64'n'n" .
$data . "'n'n";
}
}
// here's our closing mime boundary that indicates the last of the message
$message.="--{$mime_boundary}--'n";
// now we just send the message
if (mail($to, $subject, $message, $headers))
echo "Message Sent";
else
echo "Failed to send";}
?>