0

私が作成したこのフォームを使用すると、ファイルは完全に送信されますが、拡張子は省略されます。私は送信した拡張子を知っていたので、ファイルが破損していないことを確認できましたが、顧客はどの拡張子を受け取っているかを知りません (5 つの可能性があります)。顧客に正しい拡張子のファイルを送信するにはどうすればよいですか。正しい名前も良いですが、必須ではありません。

HTML:

</p>
<title>The Legend Maker - submit a story (test server)</title>
<link href="/CSS/CSS.css" rel="stylesheet" type="text/css">

<div align="center">
  <p><span class="linkText"><a href="/index.html">Home</a> <a href="/contact-us.php">Contact Us</a> <a href="/payments.html">Payments</a></span> </p>
  <p>&nbsp;</p>
  <h2 class="headingText">&nbsp;</h2>
  <h2 class="headingText">&nbsp;</h2>
  <h2 class="headingText">&nbsp;</h2>
  <h2 class="headingText">(for testing purposes)</h2>
  <h2 class="headingText">Submit a story test server</h2>
</div>
<form method="post" action="scripts/email.php" enctype="multipart/form-data">
<table width="476" height="468" border="0" cellpadding="0" cellspacing="2">
<tr>
<td width="23%" height="25" class="bodytext"><p align="center">Your Name:</p></td>
<td width="77%"><input name="name" type="text" id="name" size="32"></td>
</tr>
<tr>
<td height="25" class="bodytext"><p align="center">Email Address:</p></td>
<td><input name="email" type="text" id="email" value="you@example.com" size="32"></td>
</tr>
<tr>
<td height="44" class="bodytext"><p align="center">Recipient's Gender:</p></td>
<td><label>
  <select name="gender" id="gender">
    <option value="male" selected="selected">Male</option>
    <option value="female">Female</option>
    <option value="other">Other</option>
        </select>
</label></td>
</tr>
<tr>
<td height="44" class="bodytext"><p align="center">Recipient's Name:</p>  </td>
<td align="left" valign="top"><input name="recipientname" type="text" id="recipientname" value="ex: Jonny" size="32" /></td>
</tr>
<tr>
  <td height="44" class="bodytext"><p align="center">Recipient's Interests or Hobbies:</p></td>
  <td align="left" valign="top"><textarea name="hobbies" cols="50" rows="6" id="hobbies">ex: horseback riding, biking...</textarea></td>
</tr>
<tr>
  <td class="bodytext"><p align="center">Recipient's Age:</p></td>
  <td align="left" valign="top"><input name="age" type="text" id="age" size="5" maxlength="3" /></td>
</tr>
<tr>
  <td class="bodytext"><p align="center">Other Important Information:</p></td>
  <td align="left" valign="top"><textarea name="otherinfo" cols="50" rows="7" id="otherinfo">ex: other things the recipient may enjoy or their favorite superhero
Please specify information you are giving us also:
don't do this: superman
submit it like this: favorite superhero: superman</textarea></td>
</tr>
<tr>
  <td class="bodytext"><p align="center">Images You Would Like To Include In Story:</p></td>
  <td align="left" valign="top"><label>
    <br />
    <input type="file" name="file" id="file" />
  </label></td>
</tr>
<tr>
  <td class="bodytext"><p align="center">&nbsp;</p></td>
  <td align="left" valign="top"><input type="submit" name="Submit" value="Send" /></td>
</tr>
</table>
</form> 

PHP:

 <?php
    require_once '../PHPMailer_5.2.2/class.phpmailer.php';

    $name = $_POST['name'] ;
    $email = $_POST['email'] ;
    $gender = $_POST['gender'] ;
    $recipientname = $_POST['recipientname'] ;
    $hobbies = $_POST['hobbies'] ;
    $age = $_POST['age'] ;
    $otherinfo = $_POST['otherinfo'] ;
    $file = $_POST['file'] ;
    $body = "Name: $name
    Email: $email
    Gender: $gender
    Recipient's name: $recipientname
    Hobbies: $hobbies
    Age: $age
    Other Information: $otherinfo";

    $mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch

    try {
      $mail->AddAddress('***erna@yahoo.com', 'Michael ***');
      $mail->SetFrom($email, $name);
      $mail->AddReplyTo($email, $name);
      $mail->Subject = "Message From Legendmaker Customer: $name";
      $mail->Body = $body;
      $mail->AddAttachment($_FILES['file']['tmp_name']);      // attachment
      $mail->Send();
      echo "Story Request Sent Successfully</p>\n";
    } catch (phpmailerException $e) {
      echo $e->errorMessage(); //Pretty error messages from PHPMailer
    } catch (Exception $e) {
      echo $e->getMessage(); //Boring error messages from anything else!
    }
    ?>
4

1 に答える 1

0

PHPMailer のソースを確認したところ、これが関数の署名として見つかったものです。

AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') 

問題を解決するには、次のことを行う必要があります。

$mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);
于 2013-01-20T03:53:57.313 に答える