1

私はこのスクリプトを使用して特定のスタッフに電子メールを送信していましたが、システムが変更されたため、電子メールで添付ファイルを送信する必要があり、これを達成するために複数のコードを試しましたが、失敗しました...まだ受信しています電子メールですが、この場合はまったく無意味な添付ファイルなしで、私が使用しているスクリプトを以下に配置しました

使用していた実際のアドレスとSMTPサーバーを削除しました

    require("PHPMailer/class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();    // set mailer to use SMTP
$mail->Host = "SMTP.SErver.com";    

$mail->From = "From@email.com";    
$mail->FromName = "HCSC";  
$mail->AddAddress("To@email.com", "Example"); 
$mail->AddReplyTo("Reply@email.com", "Hcsc"); 

$mail->WordWrap = 50;    
$mail->IsHTML(false);    

$mail->Subject = "AuthSMTP Test";
$mail->Body    = "AuthSMTP Test Message!";
$mail->AddAttachment("matt.txt"); //this is basicly what i am trying to attach as a test but will be using excel spreadsheets in the production

if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}

echo "Message has been sent";

私はまた、ファイルを添付する他のいくつかのemtodを試しましたが、どれもうまくいかないようです。

4

3 に答える 3

5

あなたのコードはかなり単純で構文的に正しいように見えます。スクリプトはエラーメッセージを返しますか?

問題なくメッセージを受信して​​いる場合、問題はコードにあるようには見えません。

チェックするいくつかのこと:

  • ファイル「matt.txt」がWebサーバーで読み取り可能であり、パスが正しいことを確認してください。ファイルへのパスは、$ mail-> AddAttachment()メソッド呼び出しに含める必要があり、スクリプトの場所からの相対パスである必要があります。
  • 制限のためにメールサーバーが添付ファイルを削除していないことを確認するか、別の添付ファイルタイプを送信してみてください(.zipまたは.jpgファイルを試してください)
  • 新しいバージョンのphpMailerを実行している場合は、次の構文を使用して、スローされた例外(おそらく、メッセージの送信を妨げていないが、添付ファイルが含まれないようにしている例外)をキャッチしてみることができます。phpMailerサンプルコードから

    require 'PHPMailer/PHPMailerAutoload.php';
    $mail = new PHPMailer(true);
    try {
    
      $mail->IsSMTP();    // set mailer to use SMTP
      $mail->Host = "SMTP.SErver.com";    
    
      $mail->From = "From@email.com";    
      $mail->FromName = "HCSC";  
      $mail->AddAddress("To@email.com", "Example"); 
      $mail->AddReplyTo("Reply@email.com", "Hcsc"); 
    
      $mail->WordWrap = 50;    
      $mail->IsHTML(false);    
    
      $mail->Subject = "AuthSMTP Test";
      $mail->Body    = "AuthSMTP Test Message!";
      $mail->AddAttachment("matt.txt");
      echo "Message Sent OK<p></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!
    
    }
    
于 2012-06-04T04:22:37.043 に答える
3

2つまたは3つの引数を除いて、ファイルとファイル名関数のフルパスを指定する必要があります

// Setup mail class, recipients and body
$mailer->AddAttachment('/home/mywebsite/public_html/file.zip', 'file.zip');

http://www.askapache.com/php/phpfreaks-eric-rosebrocks-phpmailer-tutorial.html#File_Attachments_PHP_Mail_PHPMailer

于 2012-06-04T04:22:57.420 に答える
1

さて、これはまだ終わっていないので、私はまったく同じ問題を抱えていたので、私のために働いた私の解決策をあなたに与えると思いました。以前のメーラーはそれが正しかったと思います。ファイルへの絶対パスを特定する必要があります。これは、特に共有サーバーで操作している場合は、必ずしも簡単なことではありません。いずれにせよ、私は自分のページに次のコードを埋め込み、そのページへの正確なパスをエコーアウトしました。そこから、添付したいファイルを保持しているディレクトリにレベルをドロップする方法を簡単に理解できました。

  'var_dump(stream_resolve_include_path("Thankyou.php"));'

その行をコピーして貼り付け、ページに挿入するだけで、ページ名を挿入し、挿入したThankyou.phpを置き換えます(引用符は保持します)。ページを実行して、絶対パスを取得します。あとで削除して、PHPMailerのAddAttachmentセグメントに新しいパスを挿入するだけです。

于 2014-07-14T23:08:54.053 に答える