使用PHPMailer附加和发送文件

时间:2013-12-27 04:15:52

标签: javascript php

我需要在我的网站上制作一个允许用户上传和发送文件的表单。表单有3个字段,名称,电子邮件和附件。

用户点击发送后,我需要将所有这3个字段发送给我,并附上我的电子邮件。

我有3个文件,HTML文件包含以下格式:

<div class="span6 control-group">
    <label>File Upload:</label>
    <input type="file" name="file_upload" id="file_upload" />
</div>

.js文件,包含发送文件时的一些视觉效果,如果有错误,必填字段

var Contact = {
    initialized: false,
    initialize: function() {
        if (this.initialized) return;
        this.initialized = true;
        this.build();
        this.events();
    },
    build: function() {
        this.validations();
    },
    events: function() {
    },
    validations: function() {
        $("#contactForm").validate({
            submitHandler: function(form) {
                $.ajax({
                    type: "POST",
                    url: "php/upload-form.php",
                    data: {
                        "name": $("#contactForm #name").val(),
                        "email": $("#contactForm #email").val(),
                        "quote": $("#contactForm #upload_file").val()
                    }, // Rest is visual effects, then ends with //

Contact.initialize();

最后是upload-form.php

<?php
session_cache_limiter('nocache');
header('Expires: ' . gmdate('r', 0));
header('Content-type: application/json');
require 'php-mailer/class.phpmailer.php';
$to = 'xxx@xxx.xxx';
$subject = $_POST['subject'];
if($to) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $fields = array(
        0 => array(
            'text' => 'Name',
            'val' => $_POST['name']
        ),
        1 => array(
            'text' => 'Email address',
            'val' => $_POST['email']
        ),
        2 => array(
            'text' => 'File',
            'val' => $_POST['file_upload']
        )
    );
    $message = "";
    foreach($fields as $field) {
        $message .= $field['text'].": " . htmlspecialchars($field['val'], ENT_QUOTES) . "<br>\n";
    }
    $mail = new PHPMailer;
    $mail->IsSMTP();                                      
    $mail->From = $email;
    $mail->FromName = $_POST['name'];
    $mail->AddAttachment = $_POST['file_uploaded'];               // attachment
    $mail->AddAddress($to);                               // Add a recipient
    $mail->AddReplyTo($email, $name);
);
    $mail->IsHTML(true);                                  // Set email format to HTML
    $mail->CharSet = 'UTF-8';
    $mail->Body = $name;

    if(!$mail->Send()) {
       $arrResult = array ('response'=>'error');
    }

我到处搜索,我得到的一切都是人们说要添加

$mail->AddAttachment($_FILES['uploaded_file']['tmp_name'],

但它似乎不起作用,我在谷歌上找到的唯一答案是附加已经在服务器上的文件,但我想附加用户上传的文件,然后发送到我的电子邮件,如果可能的话,我想要文件是临时文件。

我是PHP的菜鸟,所以请帮助我。我做错了什么?

1 个答案:

答案 0 :(得分:0)

这应该可以获取文件附件并将其发送到您的电子邮件

$mail->AddAttachment($_FILES['upload']['tmp_name']);
<{1>} $_FILES() ['upload']关键字表示文件输入的名称。所以相应地调整它。

如果您想向自己发送包含实际附件名称的附件,请尝试此操作。

$mail->AddAttachment($_FILES['upload']['tmp_name'], $_FILES['upload']['name']);

我发现工作非常简单,将$_FILES['upload']['tmp_name']$_FILES['upload']['name']设置为变量。

所以,

$file = $_FILES['upload']['tmp_name']
$file_name = $_FILES['upload']['name']
$mail->AddAttachment($file, $file_name );