0

フォームを介して、コンテストに登録した人に確認メールを送信するスクリプトがあります。

電子メールはオブジェクトのプロパティであり、そのオブジェクトのコンストラクターで次のように設定されます。

$this->email = mysqli_real_escape_string($link, $email);
$this->email = iconv(mb_detect_encoding($this->email, mb_detect_order(), true), "UTF-8", $this->email);

変換は、この問題を解決するために私がそこに置いたものですが、機能しなかったことに注意してください。

次に、同じオブジェクトのパブリック関数を介して送信されます 。PHPMailerの拡張であるクラスemailMessageを確認するには、以下を参照してください。

public function sendMail($subject, $message)
{
  global $CFG;
  $mail = new emailMessage();
  $mail->Subject  = $subject;
  $mail->setContent($message);
  $sentMails = 0;
  $errors = "";

  $mail->AddAddress($this->email);

  if(!$mail->Send())
  {
    $errorCount++;
    $errors .= 'Mailer error: ' . $mail->ErrorInfo . "<br/>";
  }
  else 
  {
    $sentMails++;
  }

  $mail->ClearAddresses();

  if($sentMails > 0)
    return true;
  if($errors != "")
  {
    echo $errors;
    return false;
  }
}

そして、これはすべて、当時は非常にうまく機能しますが、特殊文字(この場合はÆ、Ø、またはÅ)が含まれている場合は常に、スクリプトで次のエラーが発生します$this->email

Mailer error: You must provide at least one recipient email address.

私はあらゆる種類の文字列エンコーディングを試しましたが、nonは機能しているようです。

デンマークのドメイン(.dk)にはこれらの特殊文字を含めることが許可されていることを指摘しておく必要があります。

誰かが問題が何であるかを教えてくれることを本当に望んでいます!読んでくれてありがとう。

最後になりましたが、約束どおり、PHPMailerの拡張機能は次のとおりです。

class emailMessage extends PHPMailer
{
  public function __construct()
  {
    $this->CharSet="UTF-8";
    $this->AddEmbeddedImage(calculateRelativePath() . "img/camp_carnival.png", "camp_carnival");
    $this->IsSMTP();  // telling the class to use SMTP
    //$this->Host     = $CFG->smtpServer; // SMTP server
    //$this->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
    $this->SMTPAuth   = true;                  // enable SMTP authentication
    $this->SMTPSecure = "tls";                 // sets the prefix to the servier
    $this->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
    $this->Port       = 587;                   // set the SMTP port for the GMAIL server
    $this->Username   = "x@domain.com";  // GMAIL username
    $this->Password   = "";            // GMAIL password
    $this->SetFrom('x@domain.com', 'Lasse Rørbæk');
    $this->AddReplyTo("x@domain.com","Lasse Rørbæk");
    $this->WordWrap = 50;
    $this->IsHTML(true);
  }

  public function setContent($content)
  {
    $this->Body = '
      <table width="100%" style="background-color:rgb(239,233,217);">
        <tr>
          <td height="15">
          </td>
        </tr>
        <tr>
          <td width="100%" style="margin:20px 0px 30px 0px;">
            <center>
              <img width="80%" alt="Camp*Carnival" src="cid:camp_carnival"/>
            </center>
          </td>
        </tr>
        <tr>
          <td style="width:100%;padding:20px 70px;">
            <div style="margin:auto;width:65%;border:3px solid rgba(0,0,0,0.5);border-radius: 7px;padding:10px 7px;background-color:rgba(255,255,255,0.7);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FFFFFFF,endColorstr=#7FFFFFFF);">
              ' . $content . '
            </div>
          </td>
        </tr>
      </table>';
  }
}
4

1 に答える 1

0

ValidateAdressそのアドレスは、正規表現で utf8 サポートが有効になっていないphpmailer の機能を通過しません。ただし、utf8 モードが有効になっていても検証されません。

例外が表示されるように、例外を有効にする必要があります。trueコンストラクターに渡すことで、例外を有効にすることができます。

class emailMessage extends PHPMailer
{
    public function __construct()
    {
        parent::__construct(true);

これにより、無効なアドレスの例外が表示されるはずです。

于 2012-12-09T17:43:03.280 に答える