Jump to content
horst

WireMailSmtp

Recommended Posts

Hi guys and girls! And thanks for Processwire!

Just to give some help with Google account settings for WireMailSMTP. They are pretty well known... but Google appears to reject SMTP authentication from "non-trusted apps". There's however a solution which doesn't make Processwire "more secure" (from Google point of view) but unlocks the possibility of sending mails by WireMailSMTP using a Google account.

  1.  You need to enable 2-factor authentication for Gmail account which You want to use with WireMailSMTP.
  2. You need to generate an "app password" different from Gmail account password.
  3. This "app password" should be used as SMTP password while setting WireMailSMTP up.
  4. Bingo! No more blocking.

P.S. In my case, that Google blocking was occuring even if i tried to send a single letter per day. I'm not sending spam, just notifications for website owner/manager.

  • Like 2

Share this post


Link to post
Share on other sites

Hi there!

Got a strange WireMailSMTP behaviour. I'm sending emails via Gmail which works fine except one problem. Gmail browser client shows that emails like this:

xxxxxxxxx@gmail.com
	
16:56 (23 минуты назад)
	
кому: я
X-Mailer: ProcessWire/WireMailSmtp
Date: Tue, 24 Sep 2019 13:56:49 GMT
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="99e7bb5336c619adedcc743d03b1ec46"
Message-ID: <20190924165649.0537.xxxxxxxxx@gmail.com>

--99e7bb5336c619adedcc743d03b1ec46
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

=D0=9F=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B8=D0=BB =D0=BD=D0=BE=D0=B2=D1=
=8B=D0=B9 =D0=B7=D0=B0=D0=BA=D0=B0=D0=B7 .
--99e7bb5336c619adedcc743d03b1ec46
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

=D0=9F=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B8=D0=BB =D0=BD=D0=BE=D0=B2=D1=
=8B=D0=B9 =D0=B7=D0=B0=D0=BA=D0=B0=D0=B7.

It's obviously the quoted-printable decoding problem. Google also allows to download any message as .eml file, and here's a sample of what is inside such a file:

X-Mailer: ProcessWire/WireMailSmtp
Date: Tue, 24 Sep 2019 13:56:49 GMT
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="99e7bb5336c619adedcc743d03b1ec46"
Message-ID: <20190924165649.0537.xxxxxxxx@gmail.com>

--99e7bb5336c619adedcc743d03b1ec46
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

=D0=9F=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B8=D0=BB =D0=BD=D0=BE=D0=B2=D1=
=8B=D0=B9 =D0=B7=D0=B0=D0=BA=D0=B0=D0=B7 .
--99e7bb5336c619adedcc743d03b1ec46
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

=D0=9F=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B8=D0=BB =D0=BD=D0=BE=D0=B2=D1=
=8B=D0=B9 =D0=B7=D0=B0=D0=BA=D0=B0=D0=B7.

Both samples are parts of the same letter with some editing applied (real address changed, some inline css skipped etc.).

Is there a way to make Gmail decode such letters in a correct way? Thanks in advance!

Share this post


Link to post
Share on other sites

I'm trying desperately to configure SendInBlue with this module, but I'm getting the same error: "SMTP settings did not work". Can I get more information on what does not work?

 

Xnip2019-10-27_14-43-24.jpg

Xnip2019-10-27_14-49-42.jpg

Share this post


Link to post
Share on other sites

@Chris B - I also wonder if you'd be better off creating a module that works with SendInBlue's API rather than using SMTP. I would use WireMailGun as a starting point.

  • Like 2

Share this post


Link to post
Share on other sites

@dragan Thank you for your answer ! I'm waiting the return of SendInBlue. I asked if on their side everything works with these parameters. I will keep you informed.

@Adrian I would like it a lot! For the moment I am not yet advanced enough in Processwire to make this. But I will come ... and so I could contribute to the modules too 🙂 

  • Like 1

Share this post


Link to post
Share on other sites
18 hours ago, Chris B said:

Can I get more information on what does not work?

You can add some debug code into a template file and call a page with it:

    $to = array('me@example.com');
    $subject = 'Wiremail-SMTP Test ' . date('H:i:s') . ' äöü ÄÖÜ ß';

    $mail = wireMail();
    if($mail->className != 'WireMailSmtp') {
        echo "<p>Couldn't get the right WireMail-Module (WireMailSmtp). found: {$mail->className}</p>";

    } else {

        $mail->from = '--INSERT YOUR SENDER ADDRESS HERE --'; // <--- !!!!

        $mail->to($to);
        $mail->subject($subject);
        $mail->sendSingle(true);

        $mail->body("Titel\n\ntext text TEXT text text\n");
        $mail->bodyHTML("<h1>Titel</h1><p>text text <strong>TEXT</strong> text text</p>");

        $dump = $mail->debugSend(1);
    }

So, in short, instead of using $mail->send(), use $mail->debugSend(1) to get output on a frontend testpage.

The output is PRE formatted and contains the areas: SETTINGS, RESULT, ERRORS and a complete debuglog of the server connection, like this one:

Spoiler

Resolving SMTP server domain "XXXXXXXXXXXXXXXXXXXX"...

Connecting to SMTP server "XXXXXXXXXXXXXXXXXXXX" port 587...

Connected to SMTP server "XXXXXXXXXXXXXXXXXXXX".

S 220 XXXXXXXXXXXXXXXXXXXX ESMTP

C EHLO wiremailsmtp.kawobi.local

S 250-XXXXXXXXXXXXXXXXXXXX

S 250-PIPELINING

S 250-SIZE 102400000

S 250-VRFY

S 250-ETRN

S 250-STARTTLS

S 250-AUTH PLAIN LOGIN

S 250-AUTH=PLAIN LOGIN

S 250-ENHANCEDSTATUSCODES

S 250-8BITMIME

S 250 DSN

C STARTTLS

S 220 2.0.0 Ready to start TLS

Starting TLS cryptographic protocol

TLS started: STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT

C EHLO wiremailsmtp.kawobi.local

S 250-XXXXXXXXXXXXXXXXXXXX

S 250-PIPELINING

S 250-SIZE 102400000

S 250-VRFY

S 250-ETRN

S 250-AUTH PLAIN LOGIN

S 250-AUTH=PLAIN LOGIN

S 250-ENHANCEDSTATUSCODES

S 250-8BITMIME

S 250 DSN

C AUTH PLAIN XXXXXXXXXXXXXXXXXXXX

S 235 2.7.0 Authentication successful

C MAIL FROM:<XXXXXXXXXXXXXXXXXXXX>

C RCPT TO:<XXXXXXXXXXXXXXXXXXXX>

C DATA

S 250 2.1.0 Ok

S 250 2.1.5 Ok

S 354 End data with <CR><LF>.<CR><LF>

C To:  <XXXXXXXXXXXXXXXXXXXX>


Subject: Wiremail-SMTP Test 08:41:31 =?UTF-8?q?=C3=A4=C3=B6=C3=BC_=C3=84=C3=96=C3=9C_=C3=9F?=


From: LocalTestmail <XXXXXXXXXXXXXXXXXXXX>


Return-Path: XXXXXXXXXXXXXXXXXXXX


Reply-To:  <XXXXXXXXXXXXXXXXXXXX>


X-Mailer: ProcessWire/WireMailSmtp


Date: Mon, 28 Oct 2019 07:41:32 GMT


MIME-Version: 1.0


Content-Type: multipart/alternative; boundary="dbbe5bbf21a410f0b110683a0afec17a"


Message-ID: <20191028084132.3800.XXXXXXXXXXXXXXXXXXXX>







C --dbbe5bbf21a410f0b110683a0afec17a


Content-Type: text/plain; charset=UTF-8


Content-Transfer-Encoding: quoted-printable





Titel=0A=0Atext text TEXT text text=0A


--dbbe5bbf21a410f0b110683a0afec17a


Content-Type: text/html; charset=UTF-8


Content-Transfer-Encoding: quoted-printable





<h1>Titel</h1><p>text text <strong>TEXT</strong> text text</p>


--dbbe5bbf21a410f0b110683a0afec17a--




C 


.

S 250 2.0.0 Ok: queued as XXXXXXXXXXXX

C QUIT

S 221 2.0.0 Bye

Disconnected.

 

 

  • Like 5

Share this post


Link to post
Share on other sites

Thank you @horst! I will test that. Why does not the module propose this directly in the "test" part?

  • Like 1

Share this post


Link to post
Share on other sites
2 minutes ago, Chris B said:

Why does not the module propose this directly in the "test" part?

Because the current test part only does the connection part, (ping the server and login), within the modules settings screen. It was written for PW 2.4 (and is backward compatible until now). I think this would be a good addition, maybe besides the current connection test.

  • Like 3

Share this post


Link to post
Share on other sites

Hello everybody,

I contacted the SendInblue technical department. Nobody can tell me why it does not work. So I chose to go through the API which makes it easier for me to send SMS and manage Hooks.

Thank you for your help 🙂

  • Like 1

Share this post


Link to post
Share on other sites
On 10/28/2019 at 8:49 AM, horst said:

You can add some debug code into a template file and call a page with it

This is GOLD!

Share this post


Link to post
Share on other sites
On 10/28/2019 at 12:49 AM, horst said:

You can add some debug code into a template file and call a page with it:

That debug code also works perfectly in the Tracy console 🙂

image.thumb.png.28d3fc9e8ce6365a28d36f9df5747d81.png

  • Like 1

Share this post


Link to post
Share on other sites

Hey everyone.

I've build a site with a couple of form/email functions using WireMailSmtp.

Everything worked fine in my localhost server during dev, but now when the site is online no emails are being send, and i'm getting no errors (not with TraceyDebug or the debugsend(1) method, nor the connection test in the config module).. just no email are being send. 

only thing i can maybe suspect is the problem, is that the live site is secure using https and webserver refuses login with SSL (!?? i honestly don't know if that makes sense, i'm a bit of noob when it comes to SMTP ), but disabling https doesn't fix it. And then also, i don't get exactly what the "Local Hostname" in the configuration should be!?

If anyone has any idea of what might be the problem I would be super grateful. I've scoured this thread for any relevant solutions, but so far still no emails 😞

Share this post


Link to post
Share on other sites
55 minutes ago, Jonathan Sachse Mikkelsen said:

 

If anyone has any idea of what might be the problem I would be super grateful. I've scoured this thread for any relevant solutions, but so far still no emails 😞

Are you using an SMTP service to send emails through? IE PostmarkApp, MailGun, SendinGrid etc

Share this post


Link to post
Share on other sites
2 hours ago, Jonathan Sachse Mikkelsen said:

i'm getting no errors (not with TraceyDebug or the debugsend(1) method, nor the connection test in the config module).

What is the debuglog saying which server is connected, what is the servers response, what is the transfer protocol etc etc. 

the debug log from the debugsend() method should tell what happened. 

Share this post


Link to post
Share on other sites
On 11/11/2019 at 4:24 PM, horst said:

What is the debuglog saying which server is connected, what is the servers response, what is the transfer protocol etc etc. 

the debug log from the debugsend() method should tell what happened. 

Hi Horst i attached the debug log. to me it looks like it successfully connected to the smtp server drafted the email and send it... but i guess i'm missing something, so if you feel like having a look i would be very happy 🙂 

wiremailDebug.txt

Share this post


Link to post
Share on other sites
4 minutes ago, Jonathan Sachse Mikkelsen said:

I'm using the clients webmail server from their webhost service. 

Unfortunately this is probably a path to disaster these days - spam has made email painful and I think the only reliable option these days is to go with a transactional email service like MailGun, Postmark, SendInBlue etc. And be sure to spend the time to learn about and properly implement DKIM, SPF, and a DMARC policy.

  • Like 1

Share this post


Link to post
Share on other sites
1 minute ago, adrian said:

Unfortunately this is probably a path to disaster these days - spam has made email painful and I think the only reliable option these days is to go with a transactional email service like MailGun, Postmark, SendInBlue etc. And be sure to spend the time to learn about and properly implement DKIM, SPF, and a DMARC policy.

ugh..ok.

but... it works fine from my localhost dev server though?!

Share this post


Link to post
Share on other sites
Just now, Jonathan Sachse Mikkelsen said:

ugh..ok.

but... it works fine from my localhost dev server though?!

I'll defer to horst on the troubleshooting of it actually sending. I am just talking about the deliverability issues you are likely to deal with. If the emails are only to site editors/staff you may be ok, but if they are being sent to site users then it's likely going to be an issue at least in my experience. Maybe others will disagree?

Share this post


Link to post
Share on other sites

pfffffff... ok everyone thanks for the replies!

but i think i just found the problem.

The client hadn't filled out the subject line field in the back-end, so i was trying to send emails with no subject lines.

so i guess all the send requests got filtered by a spam filter or something, or they were just invalid. But now they are being send.

Stupid mistake, which took way too many hours to correct! But that's web development for you i guess 😛 

  • Haha 1

Share this post


Link to post
Share on other sites

A great module that works absolutely fine out of the box but I am not happy having the SMTP password in plain text in the database. Is there maybe a reason I am just not getting why this is necessary?

  • Like 2

Share this post


Link to post
Share on other sites

Hi there,

I've been using Wire Mail for a while and now I would like to change its signature settings to send a signature along the email message "only when explicitly called via the API" (currently I have "automatically with every Message").

WireMail-signature-settings.png.a30ce971328a473dc13f39147919fcca.png

My questions are:

  1. How and where to call the signature API? That is, which code should I use and in which file should I add this code to have a "signature on demand"?
  2. I'm also using Form Builder and other PW modules that send emails with Wire Mail. How and where to set the signature via API for them, in particular for Form Builder?
  3. How to customise the signature if you don't want to use (and send) the Sender Signature set in Wire Mail module settings?

Share this post


Link to post
Share on other sites
On 3/3/2014 at 1:36 AM, horst said:

addSignature ( true | false ) - the default-behave is selectable in config screen, this can be overridden here
(only available if a signature is defined in the config screen)

Hi @LAPS,

current implementation only allows one signature, set in the config screen. The option only defines when it should be send: never everytime or defined via API.

Maybe it would be a nice addition to have a API method to pass in different signatures.

 

 

Edited by horst

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Gadgetto
      SnipWire - Snipcart integration for ProcessWire
      Snipcart is a powerful 3rd party, developer-first HTML/JavaScript shopping cart platform. SnipWire is the missing link between Snipcart and the content management framework ProcessWire.
      With SnipWire, you can quickly turn any ProcessWire site into a Snipcart online shop. The SnipWire plugin helps you to get your store up and running in no time. Detailed knowledge of the Snipcart system is not required.
      SnipWire is free and open source licensed under Mozilla Public License 2.0! A lot of work and effort has gone into development. It would be nice if you could donate an amount to support further development:

      Status update links (inside this thread) for SnipWire development
      2020-04-06 -- SnipWire 0.8.6 (beta) released! Adds support for Snipcart subscriptions and also fixes some problems 2020-03-21 -- SnipWire 0.8.5 (beta) released! Improves SnipWires webhooks interface and provides some other fixes and additions 2020-03-03 -- SnipWire 0.8.4 (beta) released! Improves compatibility for Windows based Systems. 2020-03-01 -- SnipWire 0.8.3 (beta) released! The installation and uninstallation process has been heavily revised. 2020-02-08 -- SnipWire 0.8.2 (beta) released! Added a feature to change the cart and catalogue currency by GET, POST or SESSION param 2020-02-03 -- SnipWire 0.8.1 (beta) released! All custom classes moved into their own namespaces. 2020-02-01 -- SnipWire is now available via ProcessWire's module directory! 2020-01-30 -- SnipWire 0.8.0 (beta) first public release! (module just submitted to the PW modules directory) 2020-01-28 -- added Custom Order Fields feature (first SnipWire release version is near!) 2020-01-21 -- Snipcart v3 - when will the new cart system be implemented? 2020-01-19 -- integrated taxes provider finished (+ very flexible shipping taxes handling) 2020-01-14 -- new date range picker, discount editor, order notifiactions, order statuses, and more ... 2019-11-15 -- orders filter, order details, download + resend invoices, refunds 2019-10-18 -- list filters, REST API improvements, new docs platform, and more ... 2019-08-08 -- dashboard interface, currency selector, managing Orders, Customers and Products, Added a WireTabs, refinded caching behavior 2019-06-15 -- taxes provider, shop templates update, multiCURL implementation, and more ... 2019-06-02 -- FieldtypeSnipWireTaxSelector 2019-05-25 -- SnipWire will be free and open source Plugin Key Features
      Fast and simple store setup Full integration of the Snipcart dashboard into the ProcessWire backend (no need to leave the ProcessWire admin area) Browse and manage orders, customers, discounts, abandoned carts, and more Multi currency support Custom order and cart fields Process refunds and send customer notifications from within the ProcessWire backend Process Abandoned Carts + sending messages to customers from within the ProcessWire backend Complete Snipcart webhooks integration (all events are hookable via ProcessWire hooks) Integrated taxes provider (which is more flexible then Snipcart own provider) Useful Links
      SnipWire in PW modules directory SnipWire Docs (please note that the documentation is a work in progress) SnipWire @GitHub (feature requests and suggestions for improvement are welcome - I also accept pull requests) Snipcart Website  
      ---- INITIAL POST FROM 2019-05-25 ----
       
    • By bernhard
      #######################
      Please use the new RockFinder2
      #######################
      WHY?
      This module was built to fill the gap between simple $pages->find() operations and complex SQL queries.
      The problem with $pages->find() is that it loads all pages into memory and that can be a problem when querying multiple thousands of pages. Even $pages->findMany() loads all pages into memory and therefore is a lot slower than regular SQL.
      The problem with SQL on the other hand is, that the queries are quite complex to build. All fields are separate tables, some repeatable fields use multiple rows for their content that belong to only one single page, you always need to check for the page status (which is not necessary on regular find() operations and therefore nobody is used to that).
      In short: It is far too much work to efficiently and easily get an array of data based on PW pages and fields and I need that a lot for my RockGrid module to build all kinds of tabular data.

      Basic Usage

       
      Docs & Download
      https://modules.processwire.com/modules/rock-finder/
      https://github.com/BernhardBaumrock/RockFinder
       
      Changelog
      180817, v1.0.6, support for joining multiple finders 180810, v1.0.5, basic support for options fields 180528, v1.0.4, add custom select statement option 180516, change sql query method, bump version to 1.0.0 180515, multilang bugfix 180513, beta release <180513, preview/discussion took place here: https://processwire.com/talk/topic/18983-rocksqlfinder-highly-efficient-and-flexible-sql-finder-module/
    • By MoritzLost
      TrelloWire
      This is a module that allows you to automatically create Trello cards for ProcessWire pages and update them when the pages are updated. This allows you to setup connected workflows. Card properties and change handling behaviour can be customized through the extensive module configuration. Every action the module performs is hookable, so you can modify when and how cards are created as much as you need to. The module also contains an API-component that makes it easy to make requests to the Trello API and build your own connected ProcessWire-Trello workflows.
      Features
      All the things the module can do for you without any custom code: Create a new card on Trello whenever a page is added or published (you can select applicable templates). Configure the target board, target list, name and description for new cards. Add default labels and checklists to the card. Update the card whenever the page is updated (optional). When the status of the card changes (published / unpublished, hidden / unhidden, trashed / restored or deleted), move the card to a different list or archive or delete it (configurable). You can extend this through hooks in many ways: Modifiy when and how cards are created. Modify the card properties (Target board & list, title, description, et c.) before they are sent to Trello. Create your own workflows by utilizing an API helper class with many convenient utility methods to access the Trello API directly. Feedback & Future Plans
      Let me know what you think! In particular:
      If you find any bugs report them here or on Github, I'll try to fix them. This module was born out of a use-case for a client project where we manage new form submissions through Trello. I'm not sure how many use-cases there are for this module. If you do use it, tell me about it! The Trello API is pretty extensive, I'll try to add some more helper methods to the TrelloWireApi class (let me know if you need anything in particular). I'll think about how the module can support different workflows that include Twig – talk to me if you have a use-case! Next steps could be a dashboard to manage pages that are connected to a Trello card, or a new section in the settings tab to manage the Trello connection. But it depends on whether there is any interest in this 🙂 Links
      Repository on Github Complete module documentation (getting started, configuration & API documentation) [Module directory pending approval] Module configuration

    • By MoritzLost
      Process Cache Control
      This module provides a simple solution to clearing all your cache layers at once, and an extensible interface to perform various cache-related actions.
      The simple motivation behind this module was that I was tired of manually clearing caches in several places after deploying a change on a live site. The basic purpose of this module is a simple Clear all caches link in the Setup menu which clears out all caches, no matter where they hide. You can customize what exactly the module does through it's configuration menu:
      Expire or delete all cache entries in the database, or selectively clear caches by namespace ($cache API) Clear the the template render cache. Clear out specific folders inside your site's cache directory (/site/assets/cache) Clear the ProCache page render cache (if your site is using ProCache) Refresh version strings for static assets to bust client-side browser caches (this requires some setup, see the full documentation for details). This is the basic function of the module. However, you can also add different cache management action through the API and execute them through the module's interface. For this advanced usage, the module provides:
      An interface to see all available cache actions and execute them. A system log and logging output on the module page to see verify what the module is doing. A CacheControlTools class with utility functions to clear out different caches. An API to add cache actions, execute them programmatically and even modify the default action. Permission management, allowing you granular control over which user roles can execute which actions. The complete documentation can be found in the module's README.
      Plans for improvements
      If there is some interest in this, I plan to expand this to a more general cache management solution. I particular, I would like to add additional cache actions. Some ideas that came to mind:
      Warming up the template render cache for publicly accessible pages. Removing all active user sessions. Let me know if you have more suggestions!
      Links
      https://github.com/MoritzLost/ProcessCacheControl ProcessCacheControl in the Module directory CHANGELOG in the repository Screenshots


    • By Macrura
      PrevNextTabs Module
      Github: https://github.com/outflux3/PrevNextTabs
      Processwire helper modules for adding page navigation within the editor.
      Overview
      This is a very simple module that adds Previous and Next links inline with the tabs on the page editor. Hovering over the tab shows the title of the previous or next page (using the admin's built in jqueryUI tooltips.)
      Usage
      This module is typically used during development where you or your editors need to traverse through pages for the purpose of proofing, flagging and/or commenting. Rather than returning to the page tree or lister, they can navigate with these links.
      Warnings
      If you are using PW version 2.6.1 or later, the system will prevent you from leaving the page if you have unsaved edits.
      For earlier versions, to avoid accidentally losing changes made to a page that might occur if a user accidentally clicks on one of these, make sure to have the Form Save Reminder module installed.
      http://modules.processwire.com/modules/prev-next-tabs/
×
×
  • Create New...