Schema Functions
Schema FunctionsEmail Sender

Email Sender

Included in the “Power Extensions” bundle

Kirim email melalui mutasi global _sendEmail.

Deskripsi

Mutasi _sendEmail mengirim email dengan menjalankan fungsi wp_mail milik WordPress. Hasilnya, fungsi ini akan menggunakan konfigurasi yang telah ditetapkan untuk pengiriman email di WordPress (seperti penyedia SMTP yang digunakan).

Email dapat dikirim dengan tipe konten "text" atau "HTML", tergantung pada nilai input messageAs (yang merupakan InputObject "oneof", sehingga hanya satu propertinya yang dapat diberikan).

Untuk mengirim sebagai teks, berikan properti messageAs.text:

mutation {
  _sendEmail(
    input: {
      to: "target@email.com"
      subject: "Email with text content"
      messageAs: {
        text: "Hello world!"
      }
    }
  ) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
}

Untuk mengirim sebagai HTML, berikan properti 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
      }
    }
  }
}

Field Global

_sendEmail adalah sebuah field global (atau, lebih tepatnya, mutasi global). Artinya, jika Nested Mutations diaktifkan, mutasi ini dapat dijalankan pada tipe apa pun dari skema GraphQL (yaitu tidak hanya di MutationRoot).

Hal ini berguna untuk melakukan iterasi pada daftar pengguna dan mengirim email kepada masing-masing dari mereka (dalam hal ini, mutasi dipicu saat berada di tipe User):

mutation {
  users {
    email
    _sendEmail(
      input: {
        to: $__email
        subject: "..."
        messageAs: {
          text: "..."
        }
      }
    ) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
}

Dikombinasikan dengan fitur dari ekstensi lain (dalam hal ini, Field to Input dan PHP Functions via Schema), kita dapat membuat pesan yang dipersonalisasi untuk setiap pengguna:

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
        }
      }
    }
  }
}

Kapabilitas yang diperlukan

Mutasi dapat dibatasi hanya untuk pengguna yang memiliki kapabilitas WordPress tertentu. Pengaturan ini dikonfigurasi di halaman Settings, di bawah Plugin Configuration > Email Sender.

Mengatur kapabilitas yang diperlukan untuk Email Sender
Mengatur kapabilitas yang diperlukan untuk Email Sender

Defaultnya adalah manage_options agar pelanggan tidak dapat menggunakan mutasi untuk mengirim spam ke penerima sembarang.

Pilih (any logged-in user) untuk menonaktifkan pemeriksaan kapabilitas.

Contoh lebih lanjut

Query di bawah ini mengirim email ke pengguna admin dengan konten suatu postingan (misalnya: dapat dipicu setiap kali postingan baru diterbitkan). Query ini menggunakan ekstensi:

  • Multiple Query Execution untuk mengelola query ke dalam unit-unit logis
  • Helper Function Collection untuk menyusun pesan email menggunakan Markdown dan mengonversinya ke HTML melalui _strConvertMarkdownToHTML
  • PHP Functions via Schema untuk menyuntikkan nilai secara dinamis ke dalam subjek dan pesan email melalui field _strReplaceMultiple dan _sprintf
  • Field to Input untuk mengambil dan menyediakan email admin dari 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
  }
}