0

オンラインで入手したより大きなphpスクリプトの一部としてsendEmail関数があり、新しいMailgunアカウントを使用するように変更する必要があります。私はPHPにかなり慣れておらず、メールサーバーなどにも慣れていないので、これは先週の課題でした。Mailgunのドキュメントには、PHPを使用してHTTP POSTを介して送信する例が示されています(上部の[PHP]ボタンをクリックしてください)。

function send_simple_message() {
  $ch = curl_init();

  curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
  curl_setopt($ch, CURLOPT_USERPWD, 'api:my-api-key-here');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  curl_setopt($ch, CURLOPT_URL, 'https://api.mailgun.net/v2');
  curl_setopt($ch, CURLOPT_POSTFIELDS, array('from' => 'Excited User <me@samples.mailgun.org>',
                                             'to' => 'obukhov.sergey.nickolayevich@yandex.ru',
                                             'subject' => 'Hello',
                                             'text' => 'Testing some Mailgun awesomness!'));

  $result = curl_exec($ch);
  curl_close($ch);

  return $result;

}

私の既存のsendEmail関数は次のようになります。

public function sendEmail($to, $subj, $msg, $shortcodes = '', $bcc = false) {

    if ( !empty($shortcodes) && is_array($shortcodes) ) :

        foreach ($shortcodes as $code => $value)
            $msg = str_replace('{{'.$code.'}}', $value, $msg);

    endif;

    /* Multiple recepients? */
    if ( is_array( $to ) )
        $to = implode(', ', $to);

    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From: ' . address . "\r\n";

    /* BCC address. */
    if ( $bcc ) {
        $headers .= 'Bcc: ' . $to . "\r\n";
        $to = null;
    }

    $headers .= 'Reply-To: ' . address . "\r\n";
    $headers .= 'Return-Path: ' . address . "\r\n";

    /*
     * If running postfix, need a fifth parameter since Return-Path doesn't always work.
     */
    // $optionalParams = '-r' . address;
    $optionalParams = '';

    return mail($to, $subj, nl2br(html_entity_decode($msg)), $headers, $optionalParams);

}

他の既存の領域からそれらを描画しているので、関数でto、subject、textなどを指定したくないことを知っているので、関数にこのようなものを一時的に追加してみました(申し訳ありませんが方法がありませんそれがめちゃくちゃになって、最初からやり直したので、すべてがまとめられているように見えました:

curl_setopt($ch, CURLOPT_POSTFIELDS, array('from' => 'Webmaster <webmaster@mydomain.com>',
                                             'to' => $to,
                                             'subject' => $subj,
                                             'text' => $msg));

$ch = curl_init();また、sendEmail関数のすぐ内側とすべてのcurl_setopt行を追加しました。それを超えて私は迷子になり、おそらくあなたが推測できるように、何も起こりませんでした。

誰かが私に2つを組み合わせる方法と、なぜこの種のものに非常に似ている場所を私に指摘することができますか?

助けてくれてありがとう!

4

1 に答える 1

1

私があなたの質問について理解していることから、あなたはあなたが使用しているスクリプトの一部として一番下のコードを持っています、しかし実際の郵送は一番上に与えられたサンプルのMailgunコードの線に沿って行われる必要がありますか?

これらの2つの関数を一緒にマッシュアップしました。テストされていません。エラーがある可能性があります。

関数の名前は同じで、以前とまったく同じ方法で呼び出され、同じパラメーターを受け入れます。コードの下部(実際にメールを送信した部分)を削除し、サンプルコードに置き換えたことがわかります。$toその中で、提供されたプレースホルダーテキストを、関数が上部で受け取る値である、、$subjおよびに置き換えました$msg$headersまた、これらは特にmail()使用していない関数を参照しているため、すべての行を削除しました。[編集:bccオプションでも機能するようになりました。]

あなたはまだいくつかのことを変更する必要があります:my-api-key-hereそしてExcited User <me@samples.mailgun.org>。この情報は、Mailgunアカウントから入手できるはずです。

public function sendEmail($to, $subj, $msg, $shortcodes = '', $bcc = false) {

  if ( !empty($shortcodes) && is_array($shortcodes) ) :

      foreach ($shortcodes as $code => $value)
          $msg = str_replace('{{'.$code.'}}', $value, $msg);

  endif;    

  /* Multiple recepients? */
  if ( is_array( $to ) )
      $to = implode(', ', $to);

  /* BCC address. */
  $bccrecip = '';
  if ( $bcc ) {
      $bccrecip = $to;
      $to = '';
  }

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
  curl_setopt($ch, CURLOPT_USERPWD, 'api:my-api-key-here');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  curl_setopt($ch, CURLOPT_URL, 'https://api.mailgun.net/v2');
  curl_setopt($ch, CURLOPT_POSTFIELDS, array('from' => 'Excited User <me@samples.mailgun.org>',
                                             'to' => $to,
                                             'bcc' => $bccrecip,
                                             'subject' => $subj,
                                             'text' => $msg));

  $result = curl_exec($ch);
  curl_close($ch);

  return $result;

}
于 2013-03-04T13:39:07.957 に答える