Email Sender
Отправка писем через глобальную мутацию _sendEmail.
Описание
Мутация _sendEmail отправляет письма, вызывая функцию WordPress wp_mail. В результате будет использована конфигурация отправки почты, заданная в WordPress (например, используемый SMTP-провайдер).
Письмо можно отправить с типом содержимого «text» или «HTML» — в зависимости от значения входного параметра messageAs (который является InputObject типа «oneof», поэтому можно указать только одно из его свойств).
Чтобы отправить в виде текста, укажите свойство messageAs.text:
mutation {
_sendEmail(
input: {
to: "target@email.com"
subject: "Email with text content"
messageAs: {
text: "Hello world!"
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}Чтобы отправить в виде HTML, укажите свойство messageAs.html:
mutation {
_sendEmail(
input: {
to: "target@email.com"
subject: "Email with HTML content"
messageAs: {
html: "<p>Hello world!</p>"
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}Глобальное поле
_sendEmail является глобальным полем (точнее, глобальной мутацией). Это означает, что если включены Nested Mutations, данная мутация может выполняться для любого типа схемы GraphQL (то есть не только в MutationRoot).
Это удобно для перебора списка пользователей и отправки письма каждому из них (в этом случае мутация вызывается в контексте типа User):
mutation {
users {
email
_sendEmail(
input: {
to: $__email
subject: "..."
messageAs: {
text: "..."
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}В сочетании с возможностями других расширений (в данном случае Field to Input и PHP Functions via Schema) можно создавать персонализированные сообщения для каждого пользователя:
mutation {
users {
email
displayName
remainingCredits: metaValue(key: "credits")
emailMessage: _sprintf(
string: """
<p>Hello %s!</p>
<p>Your have <strong>%s remaining credits</strong> in your account.</p>
<p><a href="%s">Buy more?</a></p>
""",
values: [
$__displayName,
$__remainingCredits,
"https://mysite.com/buy-credits"
]
)
_sendEmail(
input: {
to: $__email
subject: "Remaining credits"
messageAs: {
html: $__emailMessage
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}
}Требуемые права доступа
Мутацию можно ограничить только для пользователей, обладающих определённой возможностью (capability) WordPress. Эта настройка задаётся на странице Настройки, в разделе Plugin Configuration > Email Sender.

По умолчанию установлено manage_options, чтобы подписчики не могли использовать мутацию для рассылки спама произвольным получателям.
Выберите (any logged-in user), чтобы отключить проверку прав доступа.
Дополнительные примеры
Запрос ниже отправляет письмо пользователю-администратору с содержимым некоторой записи (например, он может запускаться при публикации новой записи). Используются следующие расширения:
- Multiple Query Execution — для разбиения запроса на логические блоки
- Helper Function Collection — для составления текста письма с использованием Markdown и его конвертации в HTML через
_strConvertMarkdownToHTML - PHP Functions via Schema — для динамической подстановки значений в тему и текст письма через поля
_strReplaceMultipleи_sprintf - Field to Input — для получения и передачи адреса электронной почты администратора из
wp_options
query GetPostData($postID: ID!) {
post(by: {id: $postID}) {
title @export(as: "postTitle")
excerpt @export(as: "postExcerpt")
url @export(as: "postLink")
author {
name @export(as: "postAuthorName")
url @export(as: "postAuthorLink")
}
}
}
query GetEmailData @depends(on: "GetPostData") {
emailMessageTemplate: _strConvertMarkdownToHTML(
text: """
There is a new post by [{$postAuthorName}]({$postAuthorLink}):
**{$postTitle}**: {$postExcerpt}
[Read online]({$postLink})
"""
)
emailMessage: _strReplaceMultiple(
search: ["{$postAuthorName}", "{$postAuthorLink}", "{$postTitle}", "{$postExcerpt}", "{$postLink}"],
replaceWith: [$postAuthorName, $postAuthorLink, $postTitle, $postExcerpt, $postLink],
in: $__emailMessageTemplate
)
@export(as: "emailMessage")
subject: _sprintf(string: "New post created by %s", values: [$postAuthorName])
@export(as: "emailSubject")
}
mutation SendEmail @depends(on: "GetEmailData") {
adminEmail: optionValue(name: "admin_email")
_sendEmail(
input: {
to: $__adminEmail
subject: $emailSubject
messageAs: {
html: $emailMessage
}
}
) {
status
}
}