Cakephp Mail delaying user sign up - cakephp

I am using cakephp framework for my web application development. My application will send welcome email after user entering his information. After this only it will display 'Sign Success' message. Unfortunately CakeEmail taking around 6 seconds to send a mail, so my sign up approximately taking 8 seconds. So how can I speed up the sign up process without removing CakeEmail.

You should defer sending of the email so that the user doesn't have to wait for the email to be sent before rendering any content. Whether the email has been sent or not makes no difference to the user seeing your 'Sign Success' page so shouldn't be responsible for increasing page response time.
Take a look at using something like the Queue plugin for CakePHP to defer sending of email. This would allow you to log that an email needs to be sent after the user's data has been saved. You'd then setup a task for sending the email. The task would executed the next time the queue is run (for example, by a cronjob).

Related

Log a user out when they close the browser React JS Cognito

I am using ReactJS as my front end, with a python flask API backend. I have one hole in my application as it stands - when my users close out of the browser, they are not logged out (unless the Cognito refresh token expires).
However, I have read that the refresh token should not expire in a short period of time, and on Cognito, it has a minimum of 60 minutes.
I also have tried and disliked the window onUnload since (A) it only works on the first window/tab you open for the application and (B) reloads also trigger the onUnload.
I am currently considering my option to be on my backend, ie marking the last time I heard from the user and logging them out after 15 minutes if I have not heard an API call for data. However, this seems to bring its own issues (ie not every user will be refreshing the page and looking for data in the 15 minute window, but I could solve that by the onActive (I have an idle timer) whenever the user makes an action, I ping my api to tell it to reset my timer). The other main issue is I don't know how to remotely log someone out of their session in cognito without havign access to their username and passcode which feels like a security issue.
Any and all help would be appreciated

How to check Outlook folder has mail or not

What Azure service allows us to run at a fixed interval (IE every 5 min), and if a given Outlook/mailbox folder has one or more emails in it, then send one notification email?
We have a Logic App that does email processing. If the processing fails for whatever reason, the email is placed into a "Failed" folder, and an email notification is sent out. The issue is when a dependent service is down, we are getting hundreds of email an hour.
We tried creating a second Logic App that runs every 5 min, sending email if it found email in the folder that is "flagged", but we still received one email per flagged email.
We are thinking a separate service that runs every so often, and if a folder has email in it, then send out a single email.
Actually there is a Outlook trigger action to detect if there is an email is flagged. It supports to change the Folder,Importance,Interval and add other parameters to match.
And this is the action Optional Parameters description.

How can I track the delivery status of the sent email in "Send an email" Azure Logic App Outlook Connector

When using Azure Logic App Office 365 Outlook connector - "Send an email", is there a way to find out if the email was actually delivered or not to the recipient so as to take a specific action based on the failure?
I used an invalid email ID in the connector, but the action of sending email is shown as successful even though the email was not delivered. To confirm it is an invalid email ID, I sent email to this invalid email ID from my Outlook and I received an undelivered email message.
In the next action after this “Send an email” action, I selected the 3 options (has failed, is skipped, has timed out) under “Configure run after”. However, this action is never executed as the email sending action is always successful even though the email was never delivered to the user.
Below is a screenshot of my logic app. The bottom right action in yellow is never executed even though the email is not sent in the previous step.
Send Email Logic App
Any inputs on how I can find out if the email was actually delivered or not?
My goal here is to find out if the user actually received the email or not, and then take some action if the email delivery failed.
No, this is not possible from within the Logic App.
The only way to occasionally accomplish this is to monitor the sender inbox for NDRs (Non-Delivery Receipt). This can take minutes to hours.
Be aware, a number of email systems will not even send NDRs as they can be used to fish for email addresses.
You can use get emails action to get the latest email and you can perform the next action based on the condition whether the subject of the email we get contains the "Undelivered" string.
Sometimes it takes long to receive the undelivered report email in outlook. so i made a specific flow which will extract the wrong email that i sent the mail to and send me an adaptive card with that email provided in it.

Signup for email accounts from GAE app

I am faced with a rather strange request and there isn't much material online tackling that.
I am building a web app on GAE ... front end, back end, datastore, blob store, user accounts, the whole nine yards ...
Part of the requirements is to have a user communication system, (users sending messages to each other, just like Facebook) as user emails are not to be shared among other users, and the web app shall only send emails to the user sign up email strictly for security and administration purposes, and wont flood their inbox with notifications like some websites do.
I have narrowed narrowed it down to 4 options
Option 1:
Reinvent the wheel - Build this whole system form scratch on the Datastore and Blob store. However, not only is it expensive, but also I am not gonna go through all of that (just saying honestly)
Option 2:
Build a bouncing system ... User A sends message to app ... app bounces email to User B. Not very Elegant, impossible to create threads and conversations, eats up app Mail Quota used for Marketing and what not.
Option 3:
Host My own Email server onsite. Patch an API servlet and run the whole show through API. Very valid, except that the client doesn't want anything on site, and I wont be around to maintain it for him.
Option 4:(Best option if someone helps out)
Implement option 3 on a 3rd party email provider. Which brings us to the question, is there any respectable email provider that allows account sign up through API ?? I need to create a shadow email account on a 3rd party server(that the user will never know it exists) every time someone makes an account on my app. Then store all emails and their generated passwords in the Datastore, and when user logs in my web app, web app logs in 3rd party server, retrieves messages and serves it. When he wants to send a message, web app gets the message, sends an email using API as well. If someone knows how to do that on Gmail, I would be eternally grateful (but I highly doubt google allows that)
Note
I can implement the whole setup on xmpp/Jabber servers as well but these free servers keep changing all the time and they change their configurations ... bottom line they are not very reliable.
Thanks a lot guys !! I really appreciate any feed back and if you have any other suggestions please don't hesitate !! This is by no means a solid plan yet.

Paypal Integration in Web application

The scenario is that users of web application can purchase digital items. The web application will use Paypal Instant Payment Notification.
The IPN protocol consists of three steps:
PayPal sends your IPN listener a message that notifies you of the event
Your listener sends the complete unaltered message back to PayPal; the message must contain the same fields in the same order and be encoded in the same way as the original message
PayPal sends a single word back, which is either VERIFIED if the message originated with PayPal or INVALID if there is any discrepancy with what was originally sent.
Let's say it's VERIFIED, how could I know who have completed the transaction or purchased the item (user of the web application) if the user used other email address in his/her paypal? I have stored the email address of the user in session but what if he/she have different paypal email? Paypal email is included in IPN message.
For other details, maybe not useful, the application is written in Struts2 in Google-App-Engine.
You'll need a way to correlate the IPN data coming back with the user. Either by asking them to provide their paypal email or using the username/password generation facility in the IPN service. Here is a somewhat inelegant but functional approach:
When the IPN comes in off the wire, persist the paypal generated username/password and payer_id (in perhaps the datastore).
If you can't correlate by email, then when the user comes back to your site request that they enter the username/password generated from paypal's site once (just to correlate).
Lookup the username/password and then correlate their userid from the UserService back to the payerid.
The reason to use IPN is for subscription services as you can get IPN messages when the subscription is terminated, cancelled, or when payments come in (for an account that stopped paying).
The most important thing to think about is how to correlate a user of your site back to the payer_id (or even payer_ids in some cases) that are used to pay for the services they are using.
On another note, I wouldn't use the session to store information for IPN callbacks, those actually can take a LONG time sometimes (say when the x.com conference is on and everyone is hammering paypal).
If you have a running application or a better description of the look & feel, I might be able to come up with a more elegant suggestion. Let me know if this helps at all.
Why don't you use PayPal's express checkout? This way you negotiate server2server a token and then you can check with PayPal the result of that token on user's return.
If users are buying directly from your application it's easier to implement.
And I think it'is more robust than the method you're using (I never heard of it before :D )

Resources