답변:
이메일을 보내는 것을 발견 할 때까지 '이메일', '메시지'등과 같은 문자열을 Magento 2 코드베이스에서 검색하기 시작했습니다. 에서 sendPaymentFailedEmail ()을 우연히 발견했습니다 vendor/magento/module-checkout/Helper/Data.php
. 이것은 많은 변수를 설정하지만 결국 'transportBuilder'를 통해 생성되는 전송 객체에 연결합니다. 이 transportBuilder는의 인스턴스입니다 \Magento\Framework\Mail\Template\TransportBuilder
.
해당 파일 $transport
에는의 인스턴스 인 변수가 존재합니다 \Magento\Framework\Mail\TransportInterface
. 인터페이스가 있기 때문에이라는 일반 클래스도 있습니다 \Magento\Framework\Mail\Transport
. 파일을 열면이 파일 vendor/magento/framework/Mail/Transport.php
이 Zend_Mail_Transport_Sendmail로 확장됩니다.
전송 클래스 확장 \ Zend_Mail_Transport_Sendmail은 \ Magento \ Framework \ Mail \ TransportInterface를 구현합니다.
이것은 당신이 찾고있는 것입니다. DI를 사용하면이 전송을 Mandrill 또는 Amazon SES와 같은 Zend_Mail 대신 다른 이메일 프레임 워크로 대체 할 수 있습니다.
send()
메소드 가 포함되어 있기 때문에 메소드 를 포함해야합니다 sendMessage()
.
public function sendMessage()
{
try {
parent::send($this->_message);
} catch (\Exception $e) {
throw new \Magento\Framework\Exception\MailException(new \Magento\Framework\Phrase($e->getMessage()), $e);
}
}
Magento 2 TransportBuilder
는 이메일 템플릿을 사용하여 이메일 본문을 작성합니다. 일반 텍스트를 보내는 가장 간단한 방법-사용 Zend_Mail
(Magento 2 자체에서 사용) :
$email = new \Zend_Mail();
$email->setSubject("Feedback email");
$email->setBodyText($body);
$email->setFrom($from, $nameFrom);
$email->addTo($to, $nameTo);
$email->send();
/srv/public_html/pub/test.php
?
mail()
구식이며 3을 지원하지 않는 PHP에 대한 가정이 종종 있습니다. 파티 서비스.
모든 좋은 3 번째로, 실제로 잘못되었습니다. 파티 서비스는 SMTP 인터페이스를 지원하며 mail()
, 역시 지원합니다.
Amazon SES는 SMTP를 지원합니다.
SMTP를 통한 전송 mail()
은 /programming//a/14457410/716029에 설명되어 있습니다.
Magento 2 사용자 지정 전자 메일 보내기에 \ Magento \ Framework \ Mail \ Template \ TransportBuilder 클래스를 사용합니다.
트랜잭션 메일 템플리트를 정의하기 위해 간단한 모듈을 작성하고 email_tempaltes.xml 파일을 설정해야합니다.
Adminhtml 또는 Frontend Scope 영역에서 메일을 보낼 수 있습니다.
모듈을 사용하여 Magento 2에서 사용자 지정 메일을 보내기위한 단계별 가이드 링크를 공유했습니다.
$email->setBodyHtml($body)