Dag 16: Mailtjes versturen met Rules

Met de Rules module kun je het systeem automatisch emails laten versturen. Wij gaan dit gebruiken om een e-mail naar de beheerder van de website te sturen wanneer er een nieuwe factuur geplaatst wordt. De beheerder kan deze factuur dan controleren en publiceren. De rules module heb je als het goed is in dag 4 geïnstalleerd en geactiveerd, zoniet doe dit dan nu eerst.

Een ‘Rule’ aanmaken

Na het installeren van de module ga je naar Instellingen. Rechtsonder bij Workflow zie je Rules staan. Klik hierop en kies daarna voor Add new rule. Geef je rule een duidelijk naam zoals: “Beheerder mailen bij nieuwe factuur”. De ‘Labels’ hoef je niet in te vullen. Bij React on Event kies je Na opslaan van nieuwe inhoud en klik vervolgens op Opslaan.

Bij Conditions moet je aangeven dat deze rule alleen van kracht is wanneer er een factuur geplaatst wordt. Klik daarom op Add condition. Bij Select condition to add kies je voor Content is of Type. Bij Inhoudstypen kun je nu als value Facturen selecteren en klik vervolgens op opslaan.

Het volgende wat je moet doen is een actie maken. Klik op Add action. Bij Select the action to add kies je onderaan voor Send mail to all users of a role.

In het volgende scherm kun je kiezen welke rol de gebruikers moet hebben die een mail krijgen wanneer er een nieuwe factuur geplaatst wordt. In dit geval krijgen alleen de gebruikers met de 'administrator' rol een mail.

Bij Onderwerp kun je het onderwerp invullen dat gebruikt wordt in de email die verstuurd wordt naar de administrators. Het mooie is dat je hier ook Tokens kan gebruiken. Als je op Replacements klikt zie je alle tokens die je kan gebruiken. Bijvoorbeeld:

[node:author] heeft [node:title] voor [node:field-klant] met factuurnummer [node:field-factuurnummer]

Daarnaast kun je ook tokens gebruiken voor de inhoud van de email wat je onder Bericht kan invullen zoals:

"Bekijk de factuur en verwijder of publiceer deze: [node:edit-url]"

De beheerder kan nu direct op de ‘Edit URL’ klikken en de factuur bewerken of verwijderen wanneer hij of zij een mailtje krijgt. Het ‘From Address’ kun je leeg laten, dan wordt automatisch het email adres van de website gebruikt. Klik op Opslaan en vervolgens op Wijzigingen Opslaan. Je rule is nu aangemaakt.

Test je rule

Maak een nieuwe factuur aan en sla deze op. Als het goed is krijgen nu alle gebruikers met de rol ‘administrator’ rol een email met daarin de melding dat er een nieuwe factuur geplaatst is. In de mail is direct de link zichtbaar waarmee de administrators de factuur kunnen publiceren, bewerken of verwijderen.

Krijg je geen mail? Hier een paar dingen waar het op vast kan lopen:

  • Controleer nog een keer de instellingen van de rule. Voor de ‘conditions’ zijn belangrijk want als deze niet kloppen wordt er ook geen mail gestuurd.
  • Check de gebruiker waarmee je de rule test. Heeft deze wel de goede rol? En is het email adres van de gebruiker wel ingevuld?
  • Bekijk je SPAM folder in je e-mail account. Wellicht wordt de mail tegen gehouden.
  • Controleer of het überhaupt mogelijk is om emails te ontvangen van de website. Zoals bijvoorbeeld bij het aanmaken van een nieuwe account, wanneer de website ook een email verstuurt.

Een e-mail sturen naar de klant

We gaan nog een tweede rule maken zodat de klant gemaild wordt op het moment dat de administrator de factuur heeft goedgekeurd en gepubliceerd. Ga weer naar instellingen > workflow > rules en maak ditmaal een rule aan met als event After updating existing content.

Hiermee geef je aan dat er moet iets gebeuren nadat er iets is veranderd aan een al bestaande node. Wat dit "iets" precies is en om op welke inhoudstypen de regel van toepassing is, kun je weer aangeven met de conditions.

Uiteindelijk moeten maar liefst vier condities worden toevoegd. Allereerst ga je er voor zorgen dat de rule alleen wordt toegepast op het moment dat de node gepubliceerd wordt, met als extra voorwaarde dat de node voor de update nog niet gepubliceerd was.

Maak de condition Content is published aan. Als data selector kun je o.a. kiezen uit node en node-unchanged. De eerst verwijst naar de node nadat je deze hebt bewerkt, de tweede naar de node voordat je deze hebt veranderd. Omdat hij na de update gepubliceerd dient te zijn kies je hier voor node.

Vervolgens maak je nog een Content is published aan en ditmaal kies je als onder data selector voor node-unchanged. Omdat de node voor de bewerking juist ongepubliceerd moet zijn vink je de conditie negate aan, dit zorgt ervoor dat de conditie wordt omgedraaid naar het tegenovergestelde.

De derde conditie die je moet aanmaken is Content is of type, het contenttype is uiteraard Facturen.

Als vierde en laatste condition maak je Entity has field aan. Bij data selector geef je node op en onder veld kies je als value field_klant.

Door het toevoegen van deze laatste voorwaarde wordt het klant veld als het ware beschikbaar voor vervolg acties, je kunt de gegevens die bij de klant horen, bijvoorbeeld zijn e-mail adres, nu gaan gebruiken binnen een actie.

Die actie is in ons geval send mail, maak deze aan. Bovenaan vul je bij Naar de token [node:field-klant:mail] als value in. Door :mail achter field-klant te plaatsen begrijpt Drupal dat het e-mail veld dat bij de klant hoort geladen moet worden.

De volgende stappen hebben te maken met de inhoud van het e-mailtje. Ook hier kun je gebruik maken van simpele tokens die dynamisch worden ingevuld, bijvoorbeeld [node:field-factuurnummer] en [node:field-klant] voor respectievelijk het factuurnummer en de gebruikersnaam van de klant.

Sla alles op en test de rule door een factuur te publiceren (of er eentje te onpubliceren en vervolgens te publiceren).

Werkt het niet controleer dan het e-mail adres van de klant en kijk of alle condities goed staan:

Slot

Rules is een zeer krachtige module die je ook voor andere leuke dingen kan gebruiken zoals het tonen van berichten wanneer de gebruiker een actie uitvoert of het automatisch laten vullen van nodes. Morgen gaan we kijken hoe je nodes kan categoriseren met behulp van de ingebouwde ‘Taxonomy’ opties van Drupal.

Laatst gewijzigd op: