通过PHPMailer发送带附件的电子邮件

时间:2013-07-23 18:40:51

标签: php

我正准备为网站创建一个表单页面,该页面需要许多字段供用户填写,并将发送到指定的电子邮件。

到目前为止,我已经创建了一个虚拟的php电子邮件页面,可以使用Google的SMTP获取您的邮件,附件和收件人电子邮件地址。

这是我的uploadtest.html代码:

<body>

<h1>Test Upload</h1>

<form action="email.php" method="get">
Message: <input type="text" name="message">
Email: <input type="text" name="email"><br>
Attach File: <input type="file" name="file" id="file">
<input type="submit">
</form>


</body>

uploadtest.html是用户将看到的内容

这是email.php的代码:

<?php
    require("class.phpmailer.php");

    $mail = new PHPMailer();

    $recipiant = $_GET["email"];
    $message = $_GET["message"];

    $mail->IsSMTP();  // telling the class to use SMTP
    $mail->SMTPAuth   = true; // SMTP authentication
    $mail->Host       = "smtp.gmail.com"; // SMTP server
    $mail->Port       = 465; // SMTP Port
    $mail->SMTPSecure = 'ssl';
    $mail->Username   = "xxxxx@gmail.com"; // SMTP account username
    $mail->Password   = "xxxxxxxx";        // SMTP account password


    $mail->AddAttachment($_FILES['tmp_name']); //****HERE'S MY MAIN PROBLEM!!!


    $mail->SetFrom('cinicraftmatt@gmail.com', 'CiniCraft.com'); // FROM
    $mail->AddReplyTo('cinicraftmatt@gmail.com', 'Dom'); // Reply TO

    $mail->AddAddress($recipiant, 'Dominik Andrzejczuk'); // recipient email

    $mail->Subject    = "First SMTP Message"; // email subject
    $mail->Body       = $message;





    if(!$mail->Send()) {
      echo 'Message was not sent.';
      echo 'Mailer error: ' . $mail->ErrorInfo;
    } else {
      echo 'Message has been sent.';
    }
?>

从我在这里可以看出,PHPMailer的AddAttachment()方法将您想要附加的文件DIRECTORY的URL作为参数。这就是我的主要问题所在。

变量的名称是什么才能获得我上传的文件(dir / upload.jpg)的位置,以便我可以将它用作AddAttachment()方法中的参数?

3 个答案:

答案 0 :(得分:4)

不,它不需要URL或目录。它需要直接路径到文件。

e.g。

$mailer->AddAttachment(
    '/path/to/file/on/your/server.txt',
    'name_of_file_in_email',
    'base64',
    'mime/type'
);

路径不言自明。 name_of_file_in_email允许您“重命名”该文件,以便您可以在服务器上加载名为“foo.exe”的文件,它可以在客户端收到的电子邮件中显示为“bar.jpg”。

您的问题是您尝试附加上传的文件,但使用了错误的来源。它应该是

<input type="file" name="thefile" />
                         ^^^^^^^
$_FILES['thefile']['tmp_name']
         ^^^^^^^

注意$ _FILES的字段名称关系。

答案 1 :(得分:1)

您的<form>代码应指定enctype属性,如下所示:

<form ... enctype="multipart/form-data">
...
</form>

答案 2 :(得分:1)

这将通过PHPMailer Class

发送
$mail->AddAttachment($_FILES['tmp_name'],$_FILES['name']); //****HERE'S MY MAIN PROBLEM!!! So you would have to give file name also.

请尝试使用此

                       include "phpMailerClass.php";
                        $email = new PHPMailer();
                        $email->From      = $to;
                        $email->FromName  = $_POST['name'];
                        $email->Subject   = $subject;
                        $email->Body      = $EmailText;
                        $email->AddAddress( 'shafiq2626@hotmail.com' );
                        $email->IsHTML(true);
                        $file_to_attach = $_FILES['file']['tmp_name'];
                        $filename=$_FILES['file']['name'];
                        $email->AddAttachment( $file_to_attach , $filename );
                       $email->Send();   

这是代码工作正常。