2017-11-01 2 views
0

누구나 Symfony에서 Swiftmailer로 이메일을 스풀링하는 조건을 설정 했습니까? 실행중인 기능에 따라 전자 메일을 즉시 보내거나 파일로 스풀링 할 수있는 옵션이 필요합니다.Symfony Swiftmailer : 이메일을 조건부로 스풀링하거나 바로 보내기

전자 메일 서비스를 자체 번들로 추상화하고 필요할 때 다른 번들의 sendEmail() 함수를 호출하기 만하면됩니다. 하지만 일부 번들/기능의 경우 전자 메일을 즉시 보내고 다른 전자 메일의 경우 스풀링을 사용하는 것이 좋습니다. 나는 스풀 매개 변수를 내 sendEmail() 함수에서 사용하려고 생각 했으므로 함수를 호출 할 때 매개 변수가 true로 설정되면 전자 메일이 스풀링되고 false로 설정되면 즉시 전송됩니다.

아니면 간단한 조건은 충분하면 것인지?] 등

모든 아이디어, 팁, 경험 좋지 않을까! 내 config.yml에서 업데이트

:

# Swiftmailer Configuration 
swiftmailer: 
    transport: "%mailer_transport%" 
    host:  "%mailer_host%" 
    username: "%mailer_user%" 
    password: "%mailer_password%" 
    spool: 
      type: file 
      path: /srv/http/test/spool 
+0

Swiftmailer 지원하는 [기본적으로 스풀링] (https://symfony.com/doc/current/email/spool.html), 당신은 단순히 스풀을 취소 주기적으로 실행하는 cron 작업을 설정해야 –

+0

하지만, 이메일을 스풀링하지 않으려면 어떻게해야합니까? 나는 그 (것)들을 특정 상황에서 스풀로 만 원한다. 그게 내 질문으로 말하고자했던 것이다. – sonja

+0

이것이 가능하다. Swift_Mailer 인스턴스가 어떻게로드/설정되고 있는지를 보여줄 수 있는가? –

답변

1

매개 변수에 spool 옵션을 지정하여, Swiftmailers는 메시지를 전송하여 스풀을 관리합니다 Swift_Transport_SpoolTransport의 인스턴스를 사용합니다 대기열을 세상에 곧바로 보내는 대신 대기열로 보내십시오. Transport 개체를 통해 Spool 인스턴스 (Swift_MemorySpool 또는 Swift_FileSpool)에 액세스하고 Swiftmailer가 강제로 대기열을 비울 수 있습니다.

// custom function to send an email 
// inject \Swift_Mailer like you normally would 
public function sendMessage($name, \Swift_Mailer $mailer, $bypassSpool = false) 
{ 
    $message = new \Swift_Message('Hello Email') 
     ->setFrom(/* from */) 
     ->setTo(/* to */) 
     ->setBody(/* render view */); 

    $mailer->send($message); // pushes the message to the spool queue 

    if($bypassSpool) { 
     $spool = $mailer->getTransport->getSpool() 
     $spool->flushQueue(new Swift_SmtpTransport(
      /* Get host, username and password from config */ 
     )); 
    } 
} 
+0

에 답변을 추가하기 전에 질문을 추가했습니다. 새 전송 인스턴스에 매개 변수를 추가해야 할 필요가 있습니까? 매개 변수없이 시도했지만 효과가 있었지만 매개 변수를 추가하는 것의 차이점은 무엇입니까? – sonja

+0

아, 한 번 더 질문 : 그 당시 작성된 메시지 만 플러시 할 수있는 방법이 있습니까? 이제는 큐를 플러시 할 때 분명히 스풀 파일의 모든 메시지가 전송되기 때문입니다. – sonja

+0

첫 번째 질문에 @sonja : 아마도. 나는 그것을 시도하지 않았고 답을위한 공식 문서를 고집했다. 그러나 config params를 기본값으로 사용한다면 나에게 놀라지 않을 것이다. 두 번째 질문에 대해서는 매번 Swift_FileSpool 인스턴스를 새로 만들어야합니다. 저장 경로를 변경하는 것은 생성자를 통해서만 가능하므로 Swift_Mailer 인스턴스를 새로 만들 수 있습니다. 일단 그것이 초기화되면 '전송'을 변경하지 마십시오. –

관련 문제