2017-04-13 4 views
1

나는 이것을 알아낼 수있는 모든 방법으로이 문제를 해결하려고 노력했지만 확실하게 뭔가를 놓쳤습니다. 전 for-loops를 사용하여 필드에 액세스하려고했습니다. 배열, 객체 등을 호출하는 것뿐입니다. 작동시키지 못했습니다.MailGun 전자 메일이 이미 가입되어 있는지 확인하십시오.

내가 말하고자하는 것은 양식에 제공된 전자 메일이 이미 MailGun의 내 maillist에 가입하고 있는지 확인하는 것입니다. 나는 이것을 검사하는 방법을 모른다. 나는 약 1-2 시간 동안 웹 검색을 해왔다. 그리고 마침내 여기서도 묻고있다. 지금까지

내 코드 :

<?php 
session_start(); 
ini_set('display_errors', 1); 
require_once 'init.php'; 
if (!isset($_POST['email']) && isset($_POST['name'])) { 
    echo 'You have to provide an email!'; 
} else if (!isset($_POST['name']) && isset($_POST['email'])) { 
    echo 'You have to provide a name!'; 
} else if (isset($_POST['name'], $_POST['email'])) { 

    $name = $_POST['name']; 
    $email = $_POST['email']; 

    // This is temporary to test and only works if an email existing is provided. 
    // If an invalid email is provided, an error is cast 
    // See below for the error 
    if (!$mailgun->get('lists/' . MAILGUN_LIST . '/members' . $email)) { 

     echo "Email doesnt exist"; 
     die(); 

     $validate = $mailgunValidate->get('address/validate', [ 
      'address' => $email 
     ])->http_response_body; 

     if ($validate->is_valid) { 
      $hash = $mailgunOptIn->generateHash(MAILGUN_LIST, MAILGUN_SECRET, $email); 

      $mailgun->sendMessage(MAILGUN_DOMAIN, [ 
       'from'  => '[email protected]', 
       'to'  => $email, 
       'subject' => 'Please confirm your subscription to the mailing list', 
       'html'  => " 
        Hello {$name},<br><br> 
        You signed up to our mailing list. Please confirm your subscription below.<br><br> 
        <a href='http://www.adamastmar.se/confirm.php?hash={$hash}'>Click here to confirm</a>" 

      ]); 

      $mailgun->post('lists/' . MAILGUN_LIST . '/members', [ 
       'name'   => $name, 
       'address'  => $email, 
       'subscribed' => 'no' 
      ]); 

      $_SESSION['joined'] = "A message has been sent to the provided email. Please confirm the subscription by clicking the link in the mail."; 
      header('Location: ./'); 
     } 
    } else { 
     $_SESSION['alreadysub'] = "You are already a subscriber to this list!"; 
     header('Location: ./'); 
    } 
} 

>

나는 위의 코드를 사용하는 경우 내가 오류 :

Uncaught exception 'Mailgun\Connection\Exceptions\MissingEndpoint' with message 'The endpoint you've tried to access does not exist. 
Check your URL.' in /home/jivusmc/domains/adamastmar.se/public_html/vendor/mailgun/mailgun-php/src/Mailgun/Connection/RestClient.php:258 
Stack trace: #0 /home/jivusmc/domains/adamastmar.se/public_html/vendor/mailgun/mailgun-php/src/Mailgun/Connection/RestClient.php(110): 
Mailgun\Connection\RestClient->responseHandler(Object(GuzzleHttp\Psr7\Response)) 
#1 /home/jivusmc/domains/adamastmar.se/public_html/vendor/mailgun/mailgun-php/src/Mailgun/Connection/RestClient.php(195): 
Mailgun\Connection\RestClient->send('GET', 'lists/[email protected]') #2 /home/jivusmc/domains/adamastmar.se/public_html/vendor/mailgun/mailgun-php/src/Mailgun/Mailgun.php(215): 
Mailgun\Connection\RestClient->get('lists/[email protected]', Array) #3 /home/jivusmc/domains/adamastmar.se/public_html/mailinglist.php(16): 
Mailgun\Mailgun->get('lists/[email protected]') #4 {main} thrown in /home/jivusmc/domains/adamastmar.se/public_html/vendor/mailgun/mailgun-php/src/Mailgun/Connection/RestClient.php on line 258 

어떤 도움 & 팁/트릭 감사를!

답변

1

내가 가진 문제에 대한 해결책을 찾았습니다. if 문에서 모든 것을 수행하는 대신, 대신 try-catch로 둘러 쌌다. 전자 메일을 메일 그룹 목록에서 가져올 수 있는지 확인하고 오류가 발생하면 오류를 포착하여 목록에 메일을 추가합니다. (더 좋은 방법으로 이것에 대한 해결책을 찾는 것이 거의 불가능하기 때문에 여기에 게시하고 있습니다)

$name = $_POST['name']; 
    $email = $_POST['email']; 

    try { 
     $mailgun->get('lists/' . MAILGUN_LIST . '/members/' . $email); 

     $_SESSION['alreadysub'] = "You are already a subscriber to this list!"; 
     header('Location: ./'); 
    } catch (Exception $e) { 
     $validate = $mailgunValidate->get('address/validate', [ 
      'address' => $email 
     ])->http_response_body; 

     if ($validate->is_valid) { 
      $hash = $mailgunOptIn->generateHash(MAILGUN_LIST, MAILGUN_SECRET, $email); 

      $mailgun->sendMessage(MAILGUN_DOMAIN, [ 
       'from'  => '[email protected]', 
       'to'  => $email, 
       'subject' => 'Please confirm your subscription to the mailing list', 
       'html'  => " 
        Hello {$name},<br><br> 
        You signed up to our mailing list. Please confirm your subscription below.<br><br> 
        <a href='http://www.adamastmar.se/confirm.php?hash={$hash}'>Click here to confirm</a>" 

      ]); 

      $mailgun->post('lists/' . MAILGUN_LIST . '/members', [ 
       'name'   => $name, 
       'address'  => $email, 
       'subscribed' => 'no' 
      ]); 

      $_SESSION['joined'] = "A message has been sent to the provided email. Please confirm the subscription by clicking the link in the mail."; 
      header('Location: ./'); 
     } 
    }