0

我有一个 sendEmail 函数作为我上网的一个更大的 php 脚本的一部分,我需要修改它以使用我的新 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);

}

我知道我不想在我的函数中指定主题、文本等,因为它是从其他现有区域绘制的,所以我尝试在函数中的某一点添加类似的内容(对不起,我不知道如何这一切看起来都放在一起,因为它太乱了,以至于我抓挠它重新开始:

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

我还在$ch = curl_init();sendEmail 函数中添加了所有curl_setopt行。除此之外,我迷路了,你可能猜到了,什么也没发生。

有人可以告诉我如何将两者结合起来,为什么或指出我在与这种事情非常相似的地方吗?

提前感谢您的帮助!

4

1 回答 1

1

根据我对您的问题的理解,您将底部代码作为您正在使用的脚本的一部分,但是实际的邮件需要按照顶部给出的示例 Mailgun 代码的行来完成?

我已经将这两个功能混合在一起了。它没有经过测试。可能有错误。

该函数具有相同的名称,并以与以前完全相同的方式被调用,接受相同的参数。你会看到我已经删除了代码的底部——实际上是发送了电子邮件——并用示例代码替换了它。在其中,我用函数在顶部接收的值替换了它提供的占位符文本$to$subj$msg。我还删除了所有$headers行,因为这些行专门指的是mail()我们不再使用的函数。[编辑:现在也应该使用 bcc 选项。]

您仍然需要更改一些内容:my-api-key-hereExcited 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 回答