horst

WireMailSmtp

Recommended Posts

2 hours ago, Sonia Margollé said:

I use OVH 

The site is on for more than a year now,  I had a lot of "Error in hnsmtp::send : cannot connect to smtp-server!"  
even if I never change module configuration and if I check it's ok. And now the recipients ...

All the emails that I send using the module it's only to 1 recipients and sometimes another on in copy.

Check this out:

http://docs.mailpoet.com/article/49-lists-of-hosts-and-their-sending-limits

 

For OVH:

591f10824f724_ScreenShot2017-05-19at11_33_18.thumb.png.b068c9e4bb22c4e28fe4178a05a8dd6e.png

 

Most likely because of bounces, your site is unable to send emails.

A couple of things you can do:

1. Contact OVH and ask them to give you some idea of what your email's standing is.

2. Use a service like Sendgrid (sendgrid.com) as an off-site SMTP delivery service. If I remember correctly, Sendgrid is free up to 12,000 emails a day.

 

Hope this helps!

  • Like 1

Share this post


Link to post
Share on other sites

Thanks, I will check that !

I try to put some log in the module and I was able to have a more detailed error message, I think

"554 5.7.1 <---->: Recipient address rejected: You have exceeded the limit of 400 messages per hour and per IP address. Please, re-try later."

What I don't understand is how that can be, never 400 messages are send via the website, and not 20 per hour to.  Oo
If I wait like 30 seconds, it's ok again.  And the emails are good, the clients can send emails directly without problems. 

Knowing it's a shared hosting, is it possible that other peoples on the server are blocking everyone ? 

  • Like 1

Share this post


Link to post
Share on other sites
3 minutes ago, Sonia Margollé said:

"554 5.7.1 <---->: Recipient address rejected: You have exceeded the limit of 400 messages per hour and per IP address. Please, re-try later."

Knowing it's a shared hosting, is it possible that other peoples on the server are blocking everyone ? 

If it's shared hosting and all of the sites on your IP are potentially sending emails, that is almost certainly your problem.

Again, I'd look into an email delivery service like Sendgrid, Mandrill or even TurboSMTP - these will help with deliverability, and you won't be competing with other sites on the same IP to get emails out.

  • Like 2

Share this post


Link to post
Share on other sites

I'm not knocking sendgrid, or any other email service. After working in the adult industry (I know, don't judge me. I was young and needed the money :) ), I am not too fond of services that want a 'contacts list' stored at their site. You may want to consider gmail, or the like, for sending small quantities of emails. If you need an email company domain, eg, yourname@yourdomain.com, then they will provide that for a small monthly fee, usually $5 or so. I have never exceeded gmail's limit, and it is far better than trying to run your own email server.

Also, the majority of my applications require subscribers to use their company email address. I have the company create a site admin email address on behalf of the application, which eliminates the need for any third-party solutions.

If you need the capacity of those email services, then by all means use them. They handle that particular need well. Just be cautious of how they treat your contacts, if they require it.

Another possibility is to move to a VPS hosting account that has an email feature. That way you are the only user that they audit to affect any email limitations.

 

  • Like 1

Share this post


Link to post
Share on other sites

I have a little problem:

I installed the plugin, set up my form submit PHP file and when I do a connection check - everything is ok! There is no error at all.

When sending the mail it is logged and everything seems fine. Except one thing: The message is never delivered!

Of course I tried to look into the spam folder - but no. The email just seems to disappear when hitting the submit button.

To make sure that my server is running correctly i tried the native mail() PHP method with the form - that is working!

 

So what might be the error in this case? Any ideas?

 

Share this post


Link to post
Share on other sites
15 hours ago, cstevensjr said:

Make sure you are at least testing sending from one mail provider to another.

Here are two links that may help you:

http://kb.mailchimp.com/delivery/spam-filters/im-not-receiving-my-test-campaigns

https://productforums.google.com/forum/#!topic/gmail/HB31aN_GR_8

 

Sending e-mails from one acccount to another works fine. I just can't get wiremail to do it. I even tried it with different mail accounts.

Share this post


Link to post
Share on other sites

If possible, What domain where you sending from and to what domain where you sending to in your test emails?  Are these accounts/SMTP Service associated with Your Hosting Provider, Gmail, Microsoft or any other third-party email provider?

  • Like 2

Share this post


Link to post
Share on other sites
2 hours ago, cstevensjr said:

If possible, What domain where you sending from and to what domain where you sending to in your test emails?  Are these accounts/SMTP Service associated with Your Hosting Provider, Gmail, Microsoft or any other third-party email provider?

I tried both. Sending from mail accounts of my hosting provider to the same accounts. Or third party mail providers. Nothing gets delivered. I think I'll ask the support of my hosting provider.

Share this post


Link to post
Share on other sites

You should try to uninstall WireMailSMTP and try sending with native WireMail. This should work, as it uses the PHP mail() function.

If WireMail works, and WireMailSMTP don't, it might be firewall restricted by your hosters settings. Native PHP mail function is controlled and allowed by your hoster, other (foreign) connections (other IPs or only Ports) maybe blocked by firewall settings of your hoster. (?)

  • Like 3

Share this post


Link to post
Share on other sites
23 hours ago, horst said:

You should try to uninstall WireMailSMTP and try sending with native WireMail. This should work, as it uses the PHP mail() function.

If WireMail works, and WireMailSMTP don't, it might be firewall restricted by your hosters settings. Native PHP mail function is controlled and allowed by your hoster, other (foreign) connections (other IPs or only Ports) maybe blocked by firewall settings of your hoster. (?)

That's good point to start with!

I have already contacted my provider becaouse I think there could be a firewall issue, too. Otherwise I have no explanation for this.

However, I will definetly test out the native WireMail variant.

Share this post


Link to post
Share on other sites

Problem solved.

My bad. In my source code I had commented out the following line:

$numSent = $mail->send();

That was the case because a little time ago when I was developing the submit form, I must have tried to test something. 

What made me so confused was the fact that the activity log still said "mail send" so I never looked into this part of the code again.

Now that's a really stupid thing, sorry that I bothered you with it. 

 

  • Like 2

Share this post


Link to post
Share on other sites

I've installed WireMailSmtp on my locally hosted ProcessWire site v 3.0.62 and filled in my sendgrid data and get a WireMailSmtpConfig: SUCCESS! upon testing

When I try the following:

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

I get "Couldn't get the right WireMail-Module (WireMailSmtp). found: WireMail"

How do I get the wiremail function to make use of the WireMailSMTP addon?

Share this post


Link to post
Share on other sites

Interesting would be how you have initialized $mail?

Share this post


Link to post
Share on other sites

In PW 3.0.42 when editing a user this error appears up top:

Quote

Strict Standards: Declaration of WireMailSmtp::attachment() should be compatible with ProcessWire\WireMail::attachment($value, $filename = '') in /Applications/AMPPS/www/catco/site/assets/cache/FileCompiler/site/modules/WireMailSmtp-master/WireMailSmtp.module on line 22

 

Share this post


Link to post
Share on other sites
On 3.9.2017 at 2:46 AM, hellomoto said:

In PW 3.0.42 when editing a user this error appears up top:

 

@hellomoto I couldn't reproduce this. Which version of WireMailSmtp you're using? I am on the same PW version but I am currently struggeling with the HTML signature. 

 

Using this code, triplechecked that at HTML signature is stored in the WireMailSmtp settings, but - and thats the fun fact - it does not work within a HTML mail - but the signature is added to the plaintext. 

		$mail = wireMail();
		$mail->from($email, $name);
		$mail->to("me@me.com", "Me");
		$mail->subject('new message - '.$config->httpHost);
		//$mail->addSignature(true); ==> has no effect either since I chose "send signature with _every_ message" in the module settings
		$mail->bodyHTML($message);
		$mail->send();

 

Has this happened to anyone before? And if so: how did you solve this?

Share this post


Link to post
Share on other sites

@chrizz can you confirm that your html-message doesn't contain a body endtag?

</body>

If this is the case, you can update the module to the new version 0.2.5, where this is fixed.

Share this post


Link to post
Share on other sites

@horst it doesn't have any tags (except the tags I am adding to the message manually).

I tried a downgrade to 0.2.3 => no success - same problems

I just installed version 0.2.5 => still no tags but the signature is there... 

this is what the mail content looks like (headers are removed)

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

hallo

--
PLAIN blablabla
--3e089748ac63f63eedf33dc907a71870
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<strong>hallo</strong>

HTML <br><br><strong>blablabla</strong>
--3e089748ac63f63eedf33dc907a71870--

so it seems as if my problem has been solved - but it's still somehow weird that there are not tags... If you want me to share more details and/or sources please let me know. Would be glad if I can help you :) 

Thanks for providing this module & the support!

 

 

Share this post


Link to post
Share on other sites

@chrizz my question was, if you used <head></head><body></body> tags in your HTML-message.

Now I know, you don't. :)

That was the reason why the Signature wasn't attached to the HTML-message-part.
https://github.com/horst-n/WireMailSmtp/blob/532dd94752597a4b2b9f3a2c02ef48b21db77f84/WireMailSmtpAdaptor.php#L280-L285

With the modules update to version 0.2.5, the html-signature get added in both cases.

  • Like 2

Share this post


Link to post
Share on other sites

hehe... fair enough to check for a closing tag ;) 

Next time I'll promise I'll use correct markup which would have solved the problem right away. Thanks for your support :)

 

  • Like 1

Share this post


Link to post
Share on other sites

Hi,

WireMailSMTP was working fine, but somehow it stops, now all I get it this:

ERROR: SMTP settings did not work.
could not start TLS connection encryption protocol

tried with google and yandex, same error....

 

Regards,

Share this post


Link to post
Share on other sites

I am experiencing problems when sending through Gmail on a site that is sending out quite a lot of emails to different recipients.

It used to work for about a month and now suddenly Google is blocking my app. It seems that Google regards the app as less secure.

I am wondering if someone has had similar issues with Gmail?

I know there is a setting in Gmail to allow less secure apps. But I would like to know why Google thinks the app is less secure.

Does it have something to do with headers being sent by WireMail that Google disqualifies as insecure? 

Here is the data array from the WireMailSmtp object (sensitive data has been replaced by xxx):
 

default_charset => "UTF-8" (5)
localhost => "dev.xxxtors.com" (31)
smtp_host => "smtp.gmail.com" (14)
smtp_port => 587
smtp_ssl => ""
smtp_start_tls => 1
smtp_user => "info@xxxtors.com" (32)
smtp_password => "xxx" (11)
smtp_password2 => ""
clear_smtp_password => ""
realm => ""
workstation => ""
authentication_mechanism => ""
smtp_debug => 0
smtp_html_debug => 0
sender_name => "xxx" (24)
sender_email => "info@xxxtors.com" (32) 
sender_reply => ""
sender_errors_to => ""
sender_signature => ""
sender_signature_html => ""
send_sender_signature => "1"
extra_headers => ""
valid_recipients => ""
smtp_certificate => ""

And here the mail object data

to => array (2)
"xxx@gmail.com" => "xxx@gmail.com" (26)
"xxx@mailbox.org" => "xxx@mailbox.org" (28)
toName => array (2)
"xxx@gmail.com" => ""
"xxx@mailbox.org" => ""
cc => array ()
ccName => array ()
bcc => array ()
from => "info@xxxtors.com" (32)
fromName => "xxx" (24)
priority => ""
dispositionNotification => ""
subject => "xxx" (51)
body => "This is an automatically created email. Please do not reply.

xxx" (139)
bodyHTML => "xxx" (183)
addSignature => NULL
attachments => array ()
header => array (1)
"X-Mailer" => "ProcessWire/WireMailSmtp" (24)
sendSingle => FALSE
sendBulk => FALSE
useSentLog => FALSE
wrapText => FALSE

Does anyone have an idea why Gmail thinks these mails are less secure?

Share this post


Link to post
Share on other sites

No, I don't know. But I see, that you have not set the sendBulk param to true.  For automatic messages, you should set it to true, even if you send single emails. 

  • Like 1

Share this post


Link to post
Share on other sites
8 hours ago, gebeer said:

Does anyone have an idea why Gmail thinks these mails are less secure?

Its because you are storing/sending a Google Account password on your own instead of using a "secure" flow like OAuth2 apps. E.g. using less secure apps is not possible with a 2FA account.

https://support.google.com/accounts/answer/6010255?hl=en

 

Quote

Google may block sign-in attempts from some apps or devices that do not use modern security standards. Since these apps and devices are easier to break into, blocking them helps keep your account safe.

 

  • Like 3

Share this post


Link to post
Share on other sites

@flydev That info is enlightening. Thank you!

So I would have to extend the WireMailSmtp module to get that functionality, right? @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 dreerr
      TemplateEnginePug (formally TemplateEngineJade)
       
      This module adds Pug templates to the TemplateEngineFactory. It uses https://github.com/pug-php/pug to render templates.
      doctype html html(lang='en') head meta(http-equiv='content-type', content='text/html; charset=utf-8') title= $page->title link(rel='stylesheet', type='text/css', href=$config->urls->templates . 'styles/main.css') body include header.pug h1= $page->title if $page->editable() p: a(href=$page->editURL) Edit Project on GitHub: github.com/dreerr/TemplateEnginePug
      Project in modules directory: modules.processwire.com/modules/template-engine-pug/
       
      For common problems/features/questions about the Factory, use the TemplateEngineFactory thread.
       
    • By tpr
      ProcessNetteTester
      Run Nette Tester tests within ProcessWire admin.
      (continued from here)

      Features
      AJAX interface for running Nette Tester tests, in bulk or manually display counter, error message and execution time in a table run all tests at once or launch single tests show formatted test error messages and report PHP syntax errors stop on first failed test (optional) hide passed tests (optional) display failed/total instead passed/total (optional) re-run failed tests only (optional) auto scroll (optional) include or exclude tests based on query parameters start/stop all tests with the spacebar reset one test or all tests (ctrl+click) https://modules.processwire.com/modules/process-nette-tester/
      https://github.com/rolandtoth/ProcessNetteTester
    • By bernhard
      Some of you might have followed the development of this module here: https://processwire.com/talk/topic/15524-previewdiscussion-rockdatatables/ . It is the successor of "RockDataTables" and requires RockFinder to get the data for the grid easily and efficiently. It uses the open source part of agGrid for grid rendering.
       
      WHY?
      ProcessWire is awesome for creating all kinds of custom backend applications, but where it is not so awesome in my opinion is when it comes to listing this data. Of course we have the built in page lister and we have ListerPro, but none of that solutions is capable of properly displaying large amounts of data, for example lists of revenues, aggregations, quick and easy sorts by the user, instant filter and those kind of features. RockGrid to the rescue 😉 
       
      Features/Highlights:
      100k+ rows Instant (client side) filter, search, sort (different sort based on data type, eg "lower/greater than" for numbers, "contains" for strings) extendable via plugins (available plugins at the moment: fullscreen, csv export, reload, batch-processing of data, column sum/statistics, row selection) all the agGrid features (cell renderers, cell styling, pagination, column grouping etc) vanilla javascript, backend and frontend support (though not all plugins are working on the frontend yet and I don't plan to support it as long as I don't need it myself)  
      Limitations:
      While there is an option to retrieve data via AJAX the actual processing of the grid (displaying, filtering, sorting) is done on the client side, meaning that you can get into troubles when handling really large datasets of several thousands of rows. agGrid should be one of the most performant grid options in the world (see the official example page with a 100k row example) and does a lot to prevent problems (such as virtual row rendering), but you should always have this limitation in mind as this is a major difference to the available lister options that do not have this limitation.
      Currently it only supports AdminThemeUikit and I don't plan to support any other admin theme.
       
      Download: https://gitlab.com/baumrock/RockGrid
      Installation: https://gitlab.com/baumrock/RockGrid/wikis/Installation
      Quikckstart: https://gitlab.com/baumrock/RockGrid/wikis/quickstart
      Further instructions: https://gitlab.com/baumrock/RockGrid/wikis/quickstart#further-instructions
       
      Module status: alpha, License: MIT
      Note that every installation and uninstallation sends an anonymous google analytics event to my google analytics account. If you don't want that feel free to remove the appropriate lines of code before installation/uninstallation.
       
      Contribute:
      You can contribute to the development of this and other modules or just say thank you by
      testing, reporting issues and making PRs at gitlab liking this post buying me a drink: paypal.me/baumrock/5 liking my facebook page: facebook.com/baumrock hiring me for pw work: baumrock.com  
      Support: Please note that this module might not be as easy and plug&play as many other modules. It needs a good understanding of agGrid (and JavaScript in general) and it likely needs some looks into the code to get all the options. Please understand that I can not provide free support for every request here in the forum. I try to answer all questions that might also help others or that might improve the module but for individual requests I offer paid support for 60€ per hour.
       
      Changelog
      180711 bugfix (naming issue) 180630 alpha realease  
      Use Cases / Examples:
      Colored grid cells, Icons, Links etc. The Grid also has a "batcher" feature built in that helps communicating with the server via AJAX and managing resource intensive tasks in batches:

      Filters, PW panel links and instant reload on panel close:

      You can combine the grid with a chart library like I did with the (outdated) RockDataTables module:

    • By tpr
      Update 2018-07-09: ProcessNetteTester module is available in the Modules Directory and on GitHub.

      This is a short tutorial on how to use Nette Tester with ProcessWire.
      As you will see it's very easy to setup and use and it's perfect for testing your code's functionality. With bootstrapping ProcessWire it's also possible to check the rendered markup of pages using the API, checking page properties, etc. It's also a great tool for module developers for writing better code. 
      While there will be nothing extraordinary here that you couldn't find in Tester's docs this can serve as a good starting point.
      Prerequisites: PHP 5.6+
      01 Download Tester
      Go to https://github.com/nette/tester/releases and download the latest release (currently 2.0.2). Download from the link reading "Source code (zip)". You can use composer also if you wish.
      02 Extract Tester files
      Create a new directory in your site root called "tester". Extract the zip downloaded here, so it should look like this:
      /site /tester/src /tester/tools /tester/appveyor.yml /tester/composer.json /tester/contributing.md /tester/license.md /tester/readme.md /wire ... 03 Create directory for test files
      Add a new directory in "/tester" called "tests". Tester recognizes "*.Test.php" and "*.phpt" files in the tests directory, recursively. 
      04 Create your first test
      In the "tests" directory create a new "MyTest.php" file.
      The first test is a very simple one that bootstraps ProcessWire and checks if the Home page name is "Home". This is not the smartest test but will show you the basics.
      Add this to "/tester/tests/MyTest.php":
      <?php namespace ProcessWire; use \Tester\Assert; use \Tester\DomQuery; use \Tester\TestCase; use \Tester\Environment; require __DIR__ . '/../src/bootstrap.php'; // load Tester require __DIR__ . '/../../index.php'; // bootstrap ProcessWire Environment::setup(); class MyTest extends TestCase {     // first test (step 04)     public function testHomeTitle()     {         $expected = 'Home'; // we expect the page title to be "Home"         $actual = wire('pages')->get(1)->title; // check what's the actual title Assert::equal($expected, $actual); // check whether they are equal     }     // second test will go here (step 06)     // third test will go here (step 07) } // run testing methods (new MyTest())->run(); I've added comment placeholders for the second and third tests that we will insert later.
      05 Run Tester
      Tester can be run either from the command line or from the browser. The command line output is more verbose and colored while in the browser it's plain text only (see later).
      Running from the command line
      Navigate to the "/tester" directory in your console and execute this:
      php src/tester.php -C tests This will start "/tester/src/tester.php" and runs test files from the "/tester/tests" directory. The "-C" switch tells Tester to use the system-wide php ini file, that is required here because when bootstrapping ProcessWire you may run into errors (no php.ini file is used by default). You may load another ini file with the "-c <path>" (check the docs).
      If the title of your Home page is "Home" you should see this:

      If it's for example "Cats and Dogs", you should see this:

      Running from the browser
      First we need to create a new PHP file in ProcessWire's root, let's call it "testrunner.php". This is because ProcessWire doesn't allow to run PHP files from its "site" directory.
      The following code runs two test classes and produces a legible output. IRL you should probably iterate through directories to get test files (eg. with glob()), and of course it's better not allow tests go out to production.
      <?php ini_set('html_errors', false); header('Content-type: text/plain'); echo 'Starting tests.' . PHP_EOL; echo '--------------------------' . PHP_EOL; $file = __DIR__ . '/PATH_TO/FirstTest.php'; echo basename($file) . ' '; require $file; echo '[OK]' . PHP_EOL; $file = __DIR__ . '/PATH_TO/SecondTest.php'; echo basename($file) . ' '; require $file; echo '[OK]' . PHP_EOL; echo '--------------------------' . PHP_EOL; echo 'Tests finished.'; exit; Navigate to "DOMAIN/testrunner.php" in your browser to execute the file. If every test succeeds you should get this:

      If there are failed tests the execution stops and you can read the error message. If there were more tests (eg. ThirdTest), those won't be displayed under the failed test.

      06 DOM test
      This test will check if a page with "basic-page" template has a "h1" element. We will create the page on the fly with ProcessWire's API. To keep things simple we will add the new test as a new method to our MyTest class.
      Add this block to the MyTest class:
      public function testBasicPageHeadline() {     $p = new Page();     $p->template = 'basic-page';     $html = $p->render();     $dom = DomQuery::fromHtml($html);     Assert::true($dom->has('h1')); } This will most likely be true but of course you can check for something more specific, for example "div#main". Note that we have used the DomQuery helper here (check the "use" statement on the top of the file).
      07 Custom function test
      You will probably want to make sure your custom functions/methods will work as they should so let's write a test that demonstrates this.
      I don't want to complicate things so I'll check if the built-in "pageName" sanitizer works as expected. Add this to the myTest class:
      public function testPageNameSanitizer() {     $expected = 'hello-world';     $actual = wire('sanitizer')->pageName('Hello world!', true);     Assert::equal($expected, $actual); } This should also be true. Try to change the expected value if you are eager to see a failure message.
       
      08 Next steps
      You can add more methods to the MyTest class or create new files in the "tests" directory. Check out the range of available Assertions and other features in the docs and see how they could help you writing more fail-safe code.
      Once you make a habit of writing tests you'll see how it can assist making your code more bulletproof and stable. Remember: test early, test often 🙂
      If you find out something useful or cool with Tester make sure to share.
    • By bernhard
      @Sergio asked about the pdf creation process in the showcase thread about my 360° feedback/survey tool and so I went ahead and set my little pdf helper module to public.
      Description from PW Weekly:
       
      Download & Docs: https://gitlab.com/baumrock/RockPdf
       
      You can combine it easily with RockReplacer: 
      See also a little showcase of the RockPdf module in this thread: