2013-02-28 1 views
0

나는 온라인 상태 인 더 큰 PHP 스크립트의 일부로 sendEmail 함수를 가지고 있으며 새 Mailgun 계정을 사용하도록 수정해야합니다. 필자는 PHP에 익숙하지 않고 서버와 메일 서버에 새로운 것입니다. 그래서 지난 주에 걸쳐이 문제가있었습니다.Jagascript/PHP sendEmail 함수가 Mailgun HTTP POST를 사용하도록 수정합니다.

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 <[email protected]>', 
              'to' => '[email protected]', 
              'subject' => 'Hello', 
              'text' => 'Testing some Mailgun awesomness!')); 

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

    return $result; 

} 

및 기존 sendEmail 기능은 다음과 같습니다 : Mailgun 문서는 example for sending via HTTP POST using PHP은 (상단에 PHP 버튼을 클릭) 제공 난에 지정하지 않는 것을 알고

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 <[email protected]>', 
              'to' => $to, 
              'subject' => $subj, 
              'text' => $msg)); 

또한 $ch = curl_init();을 sendEmail 함수뿐만 아니라 모든 curl_setopt 행에 추가했습니다. 그 너머로 나는 길을 잃었고 아마도 당신이 짐작할 수 있듯이 아무 일도 없었습니다.

누군가가 나에게 두 가지를 결합하는 법을 보여 줄 수 있고, 왜 이런 종류의 것을 닮은 어딘가를 가리킬 수 있습니까?

미리 도움을 청하십시오!

+0

정확히 작동하지 않습니까? 오류보고 기능을 켜면 오류를 출력합니까? – Tearsdontfalls

답변

1

귀하의 질문에 대한 이해에서, 당신은 사용중인 스크립트의 일부로 하단 코드를 얻었지 만 실제 메일 링은 상단에 주어진 샘플 메일 건 코드의 라인을 따라 수행되어야합니까?

나는이 두 기능을 함께 뭉개 버렸다. 테스트되지 않았습니다.. 오류가있을 수 있습니다.

이 함수의 이름은 동일하며 이전과 완전히 똑같은 방식으로 호출되며 동일한 매개 변수를 사용합니다. 전자 메일을 보낸 코드의 맨 아래 부분을 제거하고 예제 코드로 대체 한 것을 볼 수 있습니다. 그 안에는 제공된 자리 표시 자 텍스트가 맨 위의 값인 $to, $subj$msg으로 바뀌 었습니다. 또한 $headers 행을 모두 제거 했으므로 더 이상 사용하지 않는 mail() 함수를 참조하십시오. [편집 : 이제는 숨은 참조 옵션으로도 작업해야합니다.]

my-api-key-hereExcited User <[email protected]>과 같이 몇 가지 사항을 변경해야합니다. 이 정보는 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 <[email protected]>', 
              'to' => $to, 
              'bcc' => $bccrecip, 
              'subject' => $subj, 
              'text' => $msg)); 

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

    return $result; 

} 
+0

감사합니다. @ 앤디 올콘! 이것은 내가 처음으로 284739 번을 엉망으로 만든 곳을보고 도움을주었습니다. – tehaaron