Getting modular form to work with Typhoon template

Hello, I’ve been trying for hours to get the form working in the modular page of the Typhoon theme. The documentation does not seem up to date. I need any help I can get. I have filled in the to and from email addresses in the email plugin. I am developing on localhost (webserver Laragon)

This is the frontmatter I am using:

---
title: 'Neem contact op'
subtitle: 'Meer informatie nodig?'
section_classes: 'bg-primary-darker text-primary-lighter py-8 md:py-24'
title_text: light
form:
    name: contact
    action: /#neem-contact-op
    inline_errors: true
    fields:
        name:
            label: Name
            display_label: false
            placeholder: '* Je naam'
            autocomplete: 'on'
            type: text
            validate:
                required: true
        email:
            label: Email
            display_label: false
            placeholder: '* Je emailadres'
            type: email
            validate:
                required: true
        phone:
            label: Phone
            display_label: false
            placeholder: 'Je telefoonnummer (optioneel)'
            type: text
        message:
            label: Message
            display_label: false
            placeholder: '* Je bericht'
            type: textarea
            rows: 4
            validate:
                required: true
    buttons:
        submit:
            type: submit
            classes: 'bg-gray-600 hover:bg-gray-900'
            value: 'Versturen'
    process:
        message: '<b>Merci!</b> Wij hebben je bericht gekregen en zullen asap contact opnemen.'

@TonHaarmans, I have no Typhoon license, so I cannot help you with that specific theme.

However… is seems to be more of a form issue then a theme issue.

  • For clarity’s sake: What is not working? The sending of the email?
  • If so, at first sight, I’m missing something like:
    process:
      email:
        from: "{{ config.plugins.email.from }}"
        to: "{{ config.plugins.email.to }}"
        subject: "[Site Contact Form] {{ form.value.name|e }}"
        body: "{% include 'forms/data.html.twig' %}"  
    
  • If that didn’t solve it, does the form work when using Quark?
  • Have you been able to send emails using Laragon before?

As @pamtbaau said, you first need a process.email config part. But still, I wasn’t able to make Swiftmailer work on Laragon (TBH didn’t try much), had to set up SMTP and it worked perfectly fine

Hi, Thanks for your reply
If I add the lines you suggested to process, then when submitting I get the following error:

Server Error
Sorry, something went terribly wrong!

0 - Process could not be started [The system cannot find the path specified. ]

BTW, I never managed to send a form with Quark. I used formmail.php instead…
And I am very new to Laragon. Have to look into that…

Thanks

@TonHaarmans, Not knowing much about your infra, I can only ask questions…

  • What is the error output of ‘/logs/grav.log’
  • What’s is the content of ‘/user/config/plugins/email.yaml’
    Don’t forget to remove any sensitive data…
  • Have you had a chance to consult the README of plugin Email?

Thanks again for your patience and replying!
This is email.yaml:

enabled: true
from: <my email address>
from_name: <my name>
to: <my email address>
to_name: <my name>
queue:
  enabled: false
  flush_frequency: '* * * * *'
  flush_msg_limit: 10
  flush_time_limit: 100
mailer:
  engine: sendmail
  smtp:
    server: smtp.gmail.com
    port: 465
    encryption: none
    user: <my gmail email-address>
    password: <my gmail password>
    auth_mode: OAuth2
  sendmail:
    bin: '/usr/sbin/sendmail -bs'
content_type: text/html
debug: false
charset: null
cc: null
cc_name: null
bcc: null
reply_to: null
reply_to_name: null
body: null

And here is grav.log
[2021-02-04 07:07:19] grav.CRITICAL: Process could not be started [Het systeem kan het opgegeven pad niet vinden. ] - Trace: #0 C:\Users\haarm\Documents\Sites\Curiosity\user\plugins\email\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php(54): Swift_Transport_StreamBuffer->establishProcessConnection() #1 C:\Users\haarm\Documents\Sites\Curiosity\user\plugins\email\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\AbstractSmtpTransport.php(143): Swift_Transport_StreamBuffer->initialize(Array) #2 C:\Users\haarm\Documents\Sites\Curiosity\user\plugins\email\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\SendmailTransport.php(50): Swift_Transport_AbstractSmtpTransport->start() #3 C:\Users\haarm\Documents\Sites\Curiosity\user\plugins\email\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mailer.php(65): Swift_Transport_SendmailTransport->start() #4 C:\Users\haarm\Documents\Sites\Curiosity\user\plugins\email\classes\Email.php(110): Swift_Mailer->send(Object(Swift_Message)) #5 C:\Users\haarm\Documents\Sites\Curiosity\user\plugins\email\email.php(163): Grav\Plugin\Email\Email->send(Object(Swift_Message)) #6 C:\Users\haarm\Documents\Sites\Curiosity\user\plugins\email\email.php(105): Grav\Plugin\EmailPlugin->sendFormEmail(Object(Grav\Plugin\Form\Form), Array, Array) #7 C:\Users\haarm\Documents\Sites\Curiosity\vendor\symfony\event-dispatcher\EventDispatcher.php(264): Grav\Plugin\EmailPlugin->onFormProcessed(Object(RocketTheme\Toolbox\Event\Event), 'onFormProcessed', Object(Symfony\Component\EventDispatcher\EventDispatcher)) #8 C:\Users\haarm\Documents\Sites\Curiosity\vendor\symfony\event-dispatcher\EventDispatcher.php(239): Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(Array, 'onFormProcessed', Object(RocketTheme\Toolbox\Event\Event)) #9 C:\Users\haarm\Documents\Sites\Curiosity\vendor\symfony\event-dispatcher\EventDispatcher.php(73): Symfony\Component\EventDispatcher\EventDispatcher->callListeners(Array, 'onFormProcessed', Object(RocketTheme\Toolbox\Event\Event)) #10 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Grav.php(537): Symfony\Component\EventDispatcher\EventDispatcher->dispatch(Object(RocketTheme\Toolbox\Event\Event), 'onFormProcessed') #11 C:\Users\haarm\Documents\Sites\Curiosity\user\plugins\form\classes\Form.php(919): Grav\Common\Grav->fireEvent('onFormProcessed', Object(RocketTheme\Toolbox\Event\Event)) #12 C:\Users\haarm\Documents\Sites\Curiosity\user\plugins\form\form.php(275): Grav\Plugin\Form\Form->post() #13 C:\Users\haarm\Documents\Sites\Curiosity\vendor\symfony\event-dispatcher\EventDispatcher.php(264): Grav\Plugin\FormPlugin->onPageInitialized(Object(RocketTheme\Toolbox\Event\Event), 'onPageInitializ...', Object(Symfony\Component\EventDispatcher\EventDispatcher)) #14 C:\Users\haarm\Documents\Sites\Curiosity\vendor\symfony\event-dispatcher\EventDispatcher.php(239): Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(Array, 'onPageInitializ...', Object(RocketTheme\Toolbox\Event\Event)) #15 C:\Users\haarm\Documents\Sites\Curiosity\vendor\symfony\event-dispatcher\EventDispatcher.php(73): Symfony\Component\EventDispatcher\EventDispatcher->callListeners(Array, 'onPageInitializ...', Object(RocketTheme\Toolbox\Event\Event)) #16 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Grav.php(537): Symfony\Component\EventDispatcher\EventDispatcher->dispatch(Object(RocketTheme\Toolbox\Event\Event), 'onPageInitializ...') #17 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Processors\PagesProcessor.php(44): Grav\Common\Grav->fireEvent('onPageInitializ...', Object(RocketTheme\Toolbox\Event\Event)) #18 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(50): Grav\Common\Processors\PagesProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #19 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(62): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #20 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Processors\TwigProcessor.php(38): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #21 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(50): Grav\Common\Processors\TwigProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #22 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(62): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #23 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Processors\AssetsProcessor.php(39): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #24 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(50): Grav\Common\Processors\AssetsProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #25 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(62): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #26 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Processors\SchedulerProcessor.php(40): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #27 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(50): Grav\Common\Processors\SchedulerProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #28 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(62): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #29 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Processors\BackupsProcessor.php(39): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #30 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(50): Grav\Common\Processors\BackupsProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #31 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(62): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #32 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Processors\TasksProcessor.php(69): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #33 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(50): Grav\Common\Processors\TasksProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #34 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(62): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #35 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Processors\RequestProcessor.php(63): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #36 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(50): Grav\Common\Processors\RequestProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #37 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(62): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #38 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Processors\ThemesProcessor.php(38): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #39 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(50): Grav\Common\Processors\ThemesProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #40 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(62): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #41 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Processors\PluginsProcessor.php(39): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #42 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(50): Grav\Common\Processors\PluginsProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #43 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(62): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #44 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Processors\InitializeProcessor.php(128): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #45 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Debugger.php(546): Grav\Common\Processors\InitializeProcessor::Grav\Common\Processors\{closure}() #46 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Processors\InitializeProcessor.php(129): Grav\Common\Debugger->profile(Object(Closure)) #47 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(50): Grav\Common\Processors\InitializeProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #48 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Framework\RequestHandler\Traits\RequestHandlerTrait.php(62): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #49 C:\Users\haarm\Documents\Sites\Curiosity\system\src\Grav\Common\Grav.php(282): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #50 C:\Users\haarm\Documents\Sites\Curiosity\index.php(58): Grav\Common\Grav->process() #51 {main} [] []

I did read just now the readme of the email plugin. It suggests to use the service of for instance SendGrid. I did not try that yet. I use gmail for my regular emails I send with Thunderbird…

@TonHaarmans,

Took the liberty to use your config and adapted it according the Gmail section in the README of the email plugin.

mailer:
  engine: smtp  # <-- Tell Email plugin to use the smpt definition.
  smtp:
    server: smtp.gmail.com
    port: 587            # <-- different port
    encryption: tls      # <-- different encryption
    user: <your name>
    password: <your password>;

I now get a authentication error from Google Gmail. Which means, there is communication with Gmail, but login fails.

Maybe you need a look at the 3 setup steps noted in the readme:

  1. Enable IMAP in your Gmail SettingsForwarding and POP/IMAPIMAP Access
  2. Enable Less secure apps in your user account settings
  3. If you have 2-factor authentication, you will need to create a unique application password to use rather than your personal password

Got it and made the changes. Now I get a new error: 0 - Auth mode oauth2 is invalid. I tried the value none and I also left the value empty., but got the same error.

Perhaps the login with Gmail failed because I changed the password…

@TonHaarmans, Maybe my snippet wasn’t clear enough about the auth_mode: OAuth2 setting.

Values of OAuth2, none and ' ' do indeed throw errors. No value, or `` do not throw errors (in my test setup) , but you can also remove it as shown in my snippet.

You might then get the error from Gmail that authentication failed. See the 3 setup steps mentioned.

I got it working!!! Thanks a lot for bearing with me. I apparently had to Enable Less secure apps. My god! This stuff is not simple.

Maybe carefully reading the setup docs in the README of the plugin might have made it a bit easier? :wink: