2017-01-25 6 views
-3

Я хочу отправить почту с php. Я пытаюсь использовать сетку отправки. Я перешел по этой ссылке: https://github.com/sendgrid/sendgrid-phpКак отправить электронную почту, используя сетку отправки из php?

Я старался следовать каждому шагу. Я загрузил библиотеку, не используя композитор. Так добавил библиотеку в php и написал образец кода.

Но я не получаю никакого ответа или что-либо в почтальоне, пытался вернуть тело запроса, ответ попытался повторить переменные, но не получил ничего в результате.

<?php 

namespace SendGrid; 
//require 'vendor/autoload.php'; 
require("C:\Users\Siddhi\Downloads\sendgrid-php\sendgrid-php"); 

class SendEmail 
{ 
    private $db; 

    function SendEmail($database){ 
     $this->db = $database; 
    } 

    function helloEmail() 
    { 
     $from = new Email(null, "[email protected]"); 
     $subject = "Hello World from the SendGrid PHP Library"; 
     $to = new Email(null, "[email protected]"); 
     $content = new Content("text/plain", "send grid test email"); 
     $mail = new Mail($from, $subject, $to, $content); 
     $to = new Email(null, "[email protected]"); 
     $mail->personalization[0]->addTo($to); 
     //echo json_encode($mail, JSON_PRETTY_PRINT), "\n"; 

     echo $to; 
     return $mail; 
    } 

    function sendHelloEmail() 
    { 
     $apiKey = getenv('PUT-KEY-HERE'); 
     $sg = new SendEmail($apiKey); 
     $request_body = $this->helloEmail(); 
     $response = $sg->client->mail()->send()->post($request_body); 
     echo $response->statusCode(); 
     echo $response->body(); 
     echo $response->headers(); 

     return $request_body; 
    } 
} 

Я также попробовал второй способ, показанный в ссылке с использованием композитора. Итак, я дал путь композитора.

<?php 

namespace SendGrid; 
require 'C:/Program Files (x86)/Ampps/www/testslim/v1/src/vendor/autoload.php'; 
//require("C:/Users/Siddhi/Downloads/sendgrid-php/sendgrid-php"); 

class SendEmail 
{ 
    private $db; 


    function sendEmail($database) { 
     $this->db = $database; 
    } 

    function helloEmail() 
    { 
     $from = new Email(null, "[email protected]"); 
     $subject = "Hello World from the SendGrid PHP Library"; 
     $to = new Email(null, "[email protected]"); 
     $content = new Content("text/plain", "send grid test email"); 
     $mail = new Mail($from, $subject, $to, $content); 
     $to = new Email(null, "[email protected]"); 
     $mail->personalization[0]->addTo($to); 
     //echo json_encode($mail, JSON_PRETTY_PRINT), "\n"; 

     echo $from.$to; 

     return $mail; 
    } 

    function sendHelloEmail() 
    { 
     $apiKey = getenv('PUT-KEY-HERE'); 
     $sg = new SendEmail($apiKey); 
     echo $apiKey; 
     $request_body = $this->helloEmail(); 
     $response = $sg->client->mail()->send()->post($request_body); 
     echo $response->statusCode(); 
     echo $response->body(); 
     echo $response->headers(); 

     return $request_body; 
    } 
} 

К этому же он не дает никакого результата, он также блокирует другие мои URL, они не давая выход.

use \Psr\Http\Message\ServerRequestInterface as Request; 
use \Psr\Http\Message\ResponseInterface as Response; 

require '../vendor/autoload.php'; 
include '../classes/CustomerOrders.php'; 
include '../classes/ActivatedMerchants.php'; 
include '../classes/UserAuthentication.php'; 
include '../classes/UserActivationItem.php'; 
include '../classes/CustOtpConfirmation.php'; 
include '../classes/CustomerRegistrationItems.php'; 
include '../classes/DeviceToken.php'; 
include '../classes/SearchMerchants.php'; 
include '../classes/SendActivationRequest.php'; 
include '../classes/CustomerBills.php'; 
include '../classes/CustomerRegistration.php'; 
include '../classes/ItemsUnits.php'; 
include '../classes/SendEmail.php'; 

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 
ini_set('display_errors', '1'); 

$config['displayErrorDetails'] = true; 
$config['addContentLengthHeader'] = false; 

$config['db']['host'] = "localhost"; 
$config['db']['user'] = "kiranadb"; 
$config['db']['pass'] = "[email protected]"; 
$config['db']['dbname'] = "kiranadb"; 


$app = new \Slim\App(["settings" => $config]); 
$container = $app->getContainer(); 

$container['logger'] = function($c) { 
    $logger = new \Monolog\Logger('my_logger'); 
    $file_handler = new \Monolog\Handler\StreamHandler("../logs/app.log"); 
    $logger->pushHandler($file_handler); 
    return $logger; 
}; 

$container['db'] = function ($c) { 
    $db = $c['settings']['db']; 
    $pdo = new PDO("mysql:host=" . $db['host'] . ";dbname=" . $db['dbname'], 
     $db['user'], $db['pass']); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
    return $pdo; 
}; 


$app->get('/getcustorders/[{orderFrom}]', function ($request, $response, $args) { 
    $headers = apache_request_headers(); 
    $customerOrders=new CustomerOrders($this->db); 
    $result= $customerOrders->fetchOrders($args['orderFrom'],$headers['Authorization']); 
    return $this->response->withJson($result); 
}); 


$app->post('/confirmCustomerOTP', function ($request, $response) { 

    $input = $request->getParsedBody(); 
    $data = []; 
    $data['otp'] = filter_var($input['otp'], FILTER_SANITIZE_STRING); 
    $data['email_id'] = filter_var($input['email_id'], FILTER_SANITIZE_STRING); 
// $activateUser=new CustomerRegistrationItems($data); 
    $custOtpConfirmation=new CustOtpConfirmation($this->db); 
    $result= $custOtpConfirmation->activateUserStatus($input['otp'],$input['email_id']); 
    return $response = $response->withJson($result); 
}); 

$app->post('/sendCustomerOTP', function ($request, $response) { 

    $input = $request->getParsedBody(); 
    $reg_data = []; 
    $reg_data['phone_no'] = filter_var($input['phone_no'], FILTER_SANITIZE_STRING); 
    $reg_data['email_id'] = filter_var($input['email_id'], FILTER_SANITIZE_STRING); 
    // $mobileno=new CustomerRegistrationItems($reg_data); 
    $custOtpConfirmation=new CustOtpConfirmation($this->db); 
    $result= $custOtpConfirmation->sendSms($input['phone_no'],$input['email_id']); 
    return $response = $response->withJson($result); 
}); 

$app->get('/getactivatedmerchants/[{customer_id}]', function ($request, $response, $args) { 

    $headers = apache_request_headers(); 
    $activatedMerchants=new ActivatedMerchants($this->db); 
    $result= $activatedMerchants->fetchMerchants($args['customer_id'],$headers['Authorization']); 
    return $this->response->withJson($result); 
}); 

$app->post('/getSearchedMerchants', function ($request, $response, $args) { 

    $input = $request->getParsedBody(); 
    $headers = apache_request_headers(); 
    $searchMerchant = new SearchMerchants($this->db); 
    $result= $searchMerchant->fetchMerchants($input['customer_id'],$headers['Authorization'],$input['latitude'],$input['longitude']); 
    return $this->response->withJson($result); 
}); 



$app->post('/sendMail', function ($request, $response, $args) { 
    $headers = apache_request_headers(); 
    $input = $request->getParsedBody(); 
    $sendMails=new \SendGrid\SendEmail($this->db); 
    $result = $sendMails->sendHelloEmail(); 
    return $this->response->withJson($result); 
}); 

$app->run(); 

Это api1.php с URL-адресом для отправки. Я использую slim framework в php.

что поделаешь неправильно ?? Пожалуйста help..Thank вы ..

+0

Кажется, что вам нужно, чтобы включить [отчет об ошибке PHP] (http://php.net/manual/en/function.error-reporting.php) первый –

+0

Попробуйте избавиться от вызова 'getenv()', который просто получает переменную окружения. http://php.net/manual/en/function.getenv.php –

ответ

0

Изменить эту строку

От

require("C:\Users\Siddhi\Downloads\sendgrid-php\sendgrid-php"); 

Для

require("C:/Users/Siddhi/Downloads/sendgrid-php/sendgrid-php"); 

Также может быть опечатка здесь

require("C:/Users/Siddhi/Downloads/sendgrid-php/sendgrid-php"); 
           // should this be a dot^

Косой чертой DOS является e scape character помнит и никогда не должен использоваться ни на чем PHP. PHP в Windows автоматически преобразует косую черту Unix в то, что когда-либо требуется для системы Windows.

Но я должен сказать, что вы должны переместить этот код в папки веб-сервера, а не иметь его в C:users, если ни по какой другой причине, когда вы приходите, чтобы скопировать его в живом хозяине, это будет вам подножку и вы забудете переместить этот код, но что более важно эта структура данных не будет существовать оны ОС Unix и не будут доступны для вас на сервере Windows,

+0

Я попытался изменить с помощью косой черты, но не работал. и путь, который я скопировал как есть, sendgrid-php, его доза не содержит точки. @RiggsFolly – Sid

+0

Тогда, вполне возможно, серверу не разрешен доступ к этой папке – RiggsFolly

+0

Вы увидите сообщение об ошибке, что это такое – RiggsFolly

1

Вот основной посыла с sendgrid

$sendgrid = new SendGrid($key); 
$email = new SendGrid\Email(); 
$email 
    ->addTo($to,$toName) 
    ->setFrom($from) 
    ->setFromName($fromName) 
    ->setSubject($subject) 
    ->setText('Hello World!') 
    ->setHtml($html); 

try { 
    $sendgrid->send($email); 
} catch(\SendGrid\Exception $e) { 
} 
3

Сначала измените строку

require("C:\Users\Siddhi\Downloads\sendgrid-php\sendgrid-php"); 

в

require("C:\Users\Siddhi\Downloads\sendgrid-php\sendgrid-php.php"); 

Теперь это будет правильный абсолютный путь к индексного файла библиотеки.

Примечание: Однако вам не следует использовать абсолютные пути.

После этого измените

$sg = new SendEmail($apiKey); 

в

$sg = new \SendGrid($apiKey); 

Как это правильно SendGrid экземпляр вы должны пройти. В настоящее время вы создаете экземпляр SendEmail с вашим ключом API.

Теперь он должен работать.

0

Попробуйте это будет работать:

<?php 

namespace SendGrid; 
//require 'vendor/autoload.php'; 
require("C:\Users\Siddhi\Downloads\sendgrid-php\sendgrid-php.php"); 
class SendEmail 
{ 
    private $db; 

    function SendEmail($database){ 
     $this->db = $database; 
    } 

    function helloEmail() 
    { 
     $from = new Email(null, "[email protected]"); 
     $subject = "Hello World from the SendGrid PHP Library"; 
     $to = new Email(null, "[email protected]"); 
     $content = new Content("text/plain", "send grid test email"); 
     $mail = new Mail($from, $subject, $to, $content); 
     $to = new Email(null, "[email protected]"); 
     $mail->personalization[0]->addTo($to); 
     //echo json_encode($mail, JSON_PRETTY_PRINT), "\n"; 

     echo $to; 
     return $mail; 
    } 

    function sendHelloEmail() 
    { 
     $apiKey = getenv('PUT-KEY-HERE'); 
     $sg = new \SendGrid($apiKey); 
     $request_body = $this->helloEmail(); 
     $response = $sg->client->mail()->send()->post($request_body); 
     echo $response->statusCode(); 
     echo $response->body(); 
     echo $response->headers(); 

     return $request_body; 
    } 
}