【问题标题】:Example = PHPmailer sending Form <form>, with Email, with several attachments, from several inputs[file]. Example for upgrade示例 = PHPmailer 从多个输入 [file] 发送带有电子邮件的表单 <form>,带有多个附件。升级示例
【发布时间】:2016-03-04 16:41:30
【问题描述】:

我想向您展示我的自定义函数与 PHPmailer 函数一起使用,我用它来发送带有(总是)来自三个输入的三个附件的电子邮件。

我想问你,有没有可能把这种代码升级得更好?我是前端,PHP 对我来说是一个新的巨大挑战。

PS。我希望这篇文章对某人有所帮助,对于自定义,您需要将 $filePath 变量粘贴到 saveFile 函数和带有输入的数组中。

整个函数创建 randomHash 并将其连接到 $_FILES[input-name][name],之后将该文件移动到新的 ./uploads 目录。将带有 [name] 的新补丁保存到全局数组 $patch。函数checkData 检查文件类型。之后,global $patch 为文件提供补丁,以在sendMail() 函数中像邮件附件一样附加它们。

<?php 
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
    $randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}

function checkData()
{
$typeArray = [ $_FILES['file_one']['type'], $_FILES['file_two']['type'], $_FILES['file_three']['type'] ];

foreach ($typeArray as $key) {
    if ($key != 'image/jpeg' && $key != 'application/msword' && $key != 'image/png' && $key != 'application/pdf' && $key != 'application/zip') 
    {
        echo "File is incorrect!";
        return false;
    }
    else {
        echo "File is correct!";
    }
}
return true;
}

function saveFile()
{
if(checkData() == true)
{
    global $patch;
    $patch = array();
    $multiArray = 
    [
        [$_FILES['file_one']['name'], $_FILES['file_one']['tmp_name']],
        [$_FILES['file_two']['name'], $_FILES['file_two']['tmp_name']],
        [$_FILES['file_three']['name'], $_FILES['file_three']['tmp_name']]
    ];

    foreach ($multiArray as $key) 
    {
        echo "<br />Key: ".$key[0]."\n";
        echo "Key_tmp: ".$key[1]."\n";


        $randomString = generateRandomString();
        $patchFile = './uploads/'.$randomString.$key[0];

        echo "<br />Check patchFile: $patchFile";

        if(is_uploaded_file($key[1]))
        {
            echo "<br />Begin uploading to directory...<br />";
            if(!move_uploaded_file($key[1], $patchFile))
            {
                echo 'Trouble with copy file to uploads directory.';
                return false;  
            }
            else {
                echo "File was saved in uploads directory";
            }   
        }
        else 
        {
            echo "Uploading to directory... FAILED!";
            return false; 
        }

        array_push($patch, $patchFile);
    }
    var_dump($patch);
    return true;
}
else
{
    echo "File format was incorrect.";
    return false;
}
}

function sendMail() {

    if(saveFile() == true)
    {
        global $patch;

        echo "Check $patch variable:<br />";
        var_dump($patch);

        require 'PHPMailerAutoload.php';

        $email      = $_REQUEST['email'];
        $borrowman  = $_REQUEST['borrowman'];
        $lendman    = $_REQUEST['lendman'];
        $cash       = $_REQUEST['cash'];

        $mail = new PHPMailer;

        //$mail->SMTPDebug = 3;                               // Enable verbose debug output

        $mail->isSMTP();                                      // Set mailer to use SMTP
        $mail->Host = 'smtp.gmail.com';  // Specify main SMTP server. If you dont have one us GMAL or mandrill
        $mail->SMTPAuth = true;                               // Enable SMTP authentication
        $mail->Username = 'XXXXX';                 // SMTP username
        $mail->Password = 'XXXXX';                           // SMTP password
        $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
        $mail->Port = 587;                                    // TCP port to connect to

        $mail->CharSet = 'UTF-8';
        $mail->setFrom($email, 'Zgłoszenie Nakaz');
        $mail->addAddress('lechowski.g@gmail.com', 'Joe User');     // Add a recipient
        $mail->addAddress('lechowski.g@gmail.com');               // Name is optional
        $mail->addReplyTo('lechowski.g@gmail.com', 'Information');
        $mail->addCC('lechowski.g@gmail.com');
        $mail->addBCC('lechowski.g@gmail.com');

        foreach ($patch as $attachment) {
            $mail->addAttachment($attachment);
        }

        #$mail->addAttachment($patchFile);                      // Add attachments
        #$mail->addAttachment('/tmp/image.jpg', 'new.jpg');     // Optional name
        $mail->isHTML(true);                                    // Set email format to HTML

        $mail->Subject = 'Zgłoszenie - Nakaz Windykacyjny';
        $mail->Body    = '<h3>Nakaz Windykacyjny<h3><br />Wierzyciel: '.$borrowman.'<br />Email: '.$email.'<br />Dłużnik: '.$lendman.'<br />Kwota: '.$cash;
        $mail->AltBody = 'Nakaz Windykacyjny Wierzyciel: '.$borrowman.'Email: '.$email.'Dłużnik: '.$lendman.'Kwota: '.$cash;

        if(!$mail->send()) {
            echo 'Message could not be sent.';
            echo 'Mailer Error: ' . $mail->ErrorInfo;
        } else {
            echo 'Message has been sent';
        }
    }
    else
    {
        echo "Message was not sended, some problem with files was detected.";
    }
}

sendMail();
?>

【问题讨论】:

  • 该代码看起来不错,如果您是 PHP 新手,这还不错。你应该编辑你的密码。多次添加相同的地址是不可能的。是代码有问题,还是你只是在征求意见?
  • 该死,我忘记了隐藏通行证和邮件...感谢您的热情话语!:) 一切正常,但我想知道一些升级/混搭。

标签: php forms email phpmailer attachment


【解决方案1】:

我会使用input_filter 函数而不是$_REQUEST - 这样做更安全。它看起来像这样:input_filer(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL)

您可以在此处找到有关该主题的更多信息:http://www.sitepoint.com/input-validation-using-filter-functions

$mail-&gt;AltBody 中,您可能想要添加一些PHP_EOL 以将其分成几行。

你也可以考虑使用sprintf来实现更具可读性的代码:

sprints('
    <h3>Nakaz Windykacyjny<h3><br />
    Wierzyciel: %s<br />
    Email: %s<br />Dłużnik: %s<br />
    Kwota: %d',

    $borrowman,
    $email,
    $lendman
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2018-03-09
    • 2014-09-25
    • 2019-05-25
    相关资源
    最近更新 更多