I have read a few other posts on here about mass emailing, but I need some other information. We want to integrate our mass e-mail system into our current application, but I fear this may not be a good idea. Does anyone have any input as to what kind of resources are needed to send, potentially, 1000's of emails an hour? We only have one web server right now and do not have access to our mail server. We do have full access to our web server, however. Would it be a bad idea to host the mass e-mail application on our current server? Should we have a separate sever to run this type of application and call the server via web services (WCF)? Each email would need to be sent separately because the links on the e-mail are for tracking and unsubscribing purposes. I appreciate your thoughts.
Daniel
Yes its a bad idea,
One of the key things for detecting spam, is the IP address it came from (Known as its reputation) if you start sending out alot of emails which end up getting marked as spam (Which is likly, even if the users said they wated to recieve email) your IP address could end up in trouble. I wouldnt fancy doing this on my webserver.
As for specs, your bandwidth is going to be hit hard when you start doing somthing like this. Although I think you would be suprised at how fast you can send out emails (Mail Server Dependant)
Either way when it comes to sending mass mail campaigns out, I'd speak to a third party if its somthing you are serious about, they have the knowledge and hardware to perform campaigns that are not going to damage your IP rep.
I think this issue all depends on your mail server. I've been in a project where we sent out 50-100K emails in a few hours and the main limitation was the capacity of the mail server. In my opinion it would be fine to have the mail client run on the web server as it won't be using too much resources if well written, the main question is what the mail server can take.
You can help your reputation on some email providers by contacting them and or filling out bulk mail registrations.
This is for yahoo:
http://help.yahoo.com/l/us/yahoo/mail/postmaster/bulkv2.html
I would not recommend using exchange for anything like this. You will want a separate bulk mail server like Ironport.
http://www.ironport.com/
Otherwise your internal emails will get stuck in the queue with all of your bulk emails which you definitely don't want.
The actual code involved does not have to be that complex. In my case we used an asynchronous task to loop over an email list table in the DB pulling out a batch of 20 or so at a time sending then sleeping for a number of seconds. Email providers do not like receiving hundreds/thousands of emails from a source at one time. Even better if you can stagger the list by providers.
Related
My knowledge and experience of this is limited, so not sure if I've considered everything and would appreciate some advice.
Current scenario: one Exchange server, one database server, multiple load balanced webservers, all sending confirmation and alert emails on a regular basis. This exchange server is used extensively across the business which is causing a high load which the exchange server can't handle. At one point the server went down for an extended length of time, leading to emails not reaching their destination and with no logging of email attempts to determine what emails failed, so that they can be manually sent at a later date. Additionally, the website waits for the SMTP response so there's a delay in the web page loading.
Plan: A second SMTP server is to be introduced to reduce the load on the original server, along with implementing some improvements to the website to reduce it's resource hogging and improve logging of all email attempts (just header info), with SMTP response status.
Possible Solutions:
Change the website's email method to log, then attempt SMTP via one or other server, record the smtp response. Pros: Quicker to develop, Cons: No asynchronous processing of email queue.
Log email headers, then use MSMQ or RabbitMQ to send email request to a queue, and have a listener service that handles the process of actually sending the email to the Exchange server. Additionally if it continues to fail to reach the SMTP servers, leave it in the queue and retry again at a later time. Pros: Can re-use the infrastructure and experience to use MQ in future feature requirements like user requests to download data, a la Facebook. Cons: Time to learn how to do it, and actually develop when faced with a deadline.
Log email to db, then send to a local pickup folder which relays to the Exchange server, but I think this has no failover support, or method for updating the status in the email log, so while it seems quick to set up, doesn't really meet all of the requirements as far as I can see.
What I'm tempted to do is do is develop in two phases, initially just the first solution then develop the MSMQ/RabbitMQ functionality to make it asynchronous at a later date, but thought I'd ask for opinions to see if I'm overlooking something.
You may want to have a look at NServiceBus.
Specifically, there's some very new email functionality. A satellite has been created that gives you the benefits of the retries that come with NServiceBus to make your email sending more robust.
You get a separate queue without requiring a new endpoint or configuring any message mappings. This way every endpoint has this capability built in and the only config needed is a SmtpClient config section.
The API for this feature is Bus.SendEmail(new MailMessage). They’re using the System.Net.Mail.MailMessage as the abstraction for sending emails.
The code is currently in their develop branch. A sample demonstrating all this can be found here.
For more details see here
We have a project coming up where I want to create a webservice (EmailBlast) that will talk to our 3 or 4 intranet apps. These intranet apps will make webservice calls to EmailBlast informing EmailBlast of the emails that need to be sent out. I will have a simple Approval workflow so that when a request comes in I will notify admins and request thier approval before sending the emails.
So rather than do the entire project myself I was wondering if there is a Email API that can queue up emails, create reports on bounce backs etc.. And then I would wrap all that up with my Workflow stuff and web services to communicate with my intranet apps.
Is there something like that out there? Or am I going about this the wrong way?
I wrote the SOAP API for Lyris Listmanager. It is an excellent product. Sending out emails is no trivial task. You need things like domain keys, SPF etc or your emails will end up in the junk mail box, or you can easily be blacklisted. You don't want this to happen to your corporate sendmail.
Also automated bounce handling is a huge time saver. You can have the system retry after x number of times, and remove from the list if you want.
Most commercial email management systems will handle this for you. Listmanger is one of the few stand alone email management systems that you can install locally and start using it. Check out the free trial, it will save you alot of headache down the road.
MailChimp offers a great mass-mailing service and has an API for it. However, it's an external service, not something you can install internally.
There are also hardware systems that you can install internally that do this sort of thing. Google "mail appliance".
We have a website that requires to send 1000+ emails a day to all the customers who opted for the alerts. In couple of months time we are expecting to raise our customer base to 5,000 and so we may need to send 5000+ mails every day.
At the moment we are using GoDaddy email server(the email services associated with our domain) and it permits us to send only 250 mails a day. Which is far less than what we need.
Is there any cloud based service that allows us to send as many mails as we want? or do we have to install an email server on our dedicated hosting server?
Please suggest me the possible solutions to this problem as well as the software/services that are required.
Updated:We have Windows Services that run in the background to generate the required emails and send them using SmtpClient class. Our problem is restrictions imposed by GoDaddy(only 250 emails per day)
If you can't or don't want to install your own mail server, then one option is to lookup the MX records for the destination mail servers, and do the delivery directly from your application using the SmtpClient class.
Ideally, you should do this from a background thread (a Windows Service would be even better), to minimize interference with the rest of your web site.
IIRC, MX DNS lookups aren't available as a standard Framework call. However, they are pretty easy to add using p/invoke.
There are a number of different solutions out there. If you want to send all the emails you want you will need to get a good reputation with all the Email Providers like Hotmail, Yahoo Mail, GMail. This can be quite difficult since they do everything according to IPs and getting a fixed IP in a cloud can be difficult.
You can use providers, like smartFOCUS DIGITAL, to send the emails for you and they take care of the reputation with the ESPs.
I suggest you to use your own mail server. Some email servers set to check sender mail server is authorized to send email. I mean sender email server must be authorised to send your domain's emails. Otherwise receipent email server drops emails.
While this question is a bit dated. I have recently undergone a search for a host, and stumbled onto JodoHost.com. They have a reseller program in which you can have a domain classified as a 'mass mailer'. You have to sign a waiver stating that you won't use it for spam, but they give you 'unlimited' emails.
You will want to verify with them that 5000+ emails won't be an issue.
Now outside of finding a host that will allow you to send this many emails (as many ISP's will prevent this number as well), you have two options.
Invest in a dedicated server. This way you can host as many sites as you'd like on your server and send as many emails as you want. MailEnable is a perfectly suitable application to use, though its free version is limited to one domain. With this option, your cost will rise significantly over cheap GoDaddy hosting.
Use a third party service to send your mass mails. A prior employer had a list of 40,000+ users and we used a third party service to manage our list. That way they are responsible for a lot of the details to managing a list that size (add,remove, spam complaints, etc..)
Easy solution is not to use a website to send all these emails just use a desktop application.
No dedicated server in a cloud is needed, an smtp server installed will do.
Well that and a bulk email component like: aspnetmail
Is there any mail queue concept in ASP.NET?
I want to send thousands of different mail to thousands of users (i.e. each user will have a different mail). I want to send the mail at a particular time, so each user receives it at a constant time.
There really is not mail queue in the Core framework. You can send individual messages synchronously or asynchronously, but you can't really send a bunch at once.
You can queue your messages by storing them to a database or file server and then kicking off a job to loop through your saved messages and send them off.
Also, not all of your users will receive the messages at the same time, even if you could send them at the same time. There are too many external variables and dependencies (network traffic, mail server loads, spam filters) to accurately predicate when or even if your users receive their messages.
There's no native MailQueue concept within .NET framework. The queue will have to be implemented yourself. In your case, you would like the mails for each recipients to be sent at about the same time for all batches. Am I right?
Well, this is a bit tricky. You can use any SMTP server, localhost or external ones. But that also mean although you can dispatch to the SMTP server at a specific time, there's no guarantee it will reach the recipients immediately.
There are a whole bunch of stuff on mail delivery which are not exactly programming related (grey listing, spam filtering etc etc).
The alternative is to have full control on the sending and have your app directly sending the mails to the recipients' mail servers. Well that is workable and I suggest you use a commercial or a good open source component for that. Anyhow, there's still a whole bunch of issues you need to deal with, (e.g. some receiving mail server like Yahoo might block the sending a few times and let it through after a few retries).
I've posted a related question, take a look at the replies here.
I am sending email from my asp.net application, and I wanted to see if anybody could recommend a third party that will actually send the emails. Ideally they should have some sort of web service available that I can send a request to.
Mike,
Check out some of the following. They have API's that may or may not be of use/interest to you that your application could interface with. I am sure there are others, a few months ago I went through about 5-10 providers and these are the three that stuck for me.
They send out emails to your list for you and provide you with a list of what got through, viewed, subscribed, unsubscribed, etc. The best part of their services is that they have whitelist agreements with the major email providers (hotmail, yahoo, gmail, etc) so your emails don't end up in the Junkmail box.
If you wanted to automate the sending of an email through these I am pretty sure you could write an http agent to do the interaction with the website if it isn't quite there in the API how you would like.
www.constantcontact.com
www.icontact.com
www.mailchimp.com
Each have their subtle differences that should give you a starting point for what you're looking for. Good luck!
I have used http://www.authsmtp.com in the past for an SMTP server. This was especially effective when sending from Amazon EC2 instances. It was great to have someone else manage blacklist issues etc. You should be aware of though with their service there is a limit on number of unique "from" addresses used (upgradeable of course).
Very easy to use the standard System.Net.Mail API's and just specify an smtp server in web.config
<system.net>
<mailSettings>
<smtp deliveryMethod="network">
<network
host="mail.authsmtp.com"
port="2525"
defaultCredentials="false"
userName="ac55555"
password="your-password-here" />
</smtp>
</mailSettings>
</system.net>
Some of the companies that I've worked with in the past include: Responsys, Acxiom Digital, PeopleSoft, Seibel, Eloqua, Marketo, Constant Contact, Blue Hornet, Mail Chimp and Exact Target.
The only 1 that I can verify first-hand as having an API that will actually allow you to send email without logging in and doing something manually via their UI is Responsys.
Does your ISP/hosting provider provide an SMTP server? If no, what about just using that, by way of the System.Net.Mail libraries? It's not a web service, but it's trivial to use.
Mike
I think you have to look at what kind of mails your are sending from your application.
If it's only the mail with a password when user signing up for a website, or is occasional sending a reminder from a desktop application, then stick with your business ISP and there SMTP server. Just write your own mailer using the System.Net.Mail.
At the other hand are you mass mailing thousands of people regularly then you have to be concerned about at least two things:
Not getting your URL blacklisted.
The percentage delivered mails
And just those two things a professional mailing provider can do much better than any one else. On top of that the provider gives you a lot other benefits, so as reports, click through rates, etc.
I'm using www.Aweber.com for my own business and have so for years with great satisfaction. For a client I have implemented the service from www.Getresponse.com and they are also great.
I believe those two are the best of the trade, used by a lot of marketing people and Getresponse I know have a api you can program against.
And if you want to support me - here are my affiliate links:
www.Aweber.com
www.Getresponse.com
CakeMail is, as far as I know, the only solution that meets all of your criteria.
Typically, it is used to create email campaigns and send them, and as such it offers all the features you would expect from an email campaign manager. For sending individual emails, you would simply create a new campaign, add the recipient to that campaign, and send it out. You can resend the campaign if necessary. All managed through the API.
It works on a per-recipient basis, instead of fixed mailing lists as the other solutions mentioned require. There is also no sending fee outside of the credit costs, which you would experience with a comparable solution such as Campaign Monitor.
We will be using CakeMail in exactly the same configuration in the near future.
I think I understand what your problem may be. I have a software program that I market and I want to send out newsletters to several thousand people.
Originally, I purchased Spd E-Letter from Pensaworks. It is an ASP script using Access or SQL Server. I installed it with my website and because all the ASP was provided, I was able to add customizations as I desired.
The great thing about a solution such as this is that you are in control of your data. You are not storing your data in someone else's database. If for any reason, they cut you off, a third party will not give you your data back.
It worked very well for me for several years ... until I changed webshosts and the SMTP limits at the new webhost were too low. The ISP limited batches to 50 emails (I think that's the number) at a time and wouldn't let me send out more than a couple of hundred emails an hour.
I looked at dozens of 3rd party providers of this service, from ConstantContact to Bravenet to everyone else. If you were to go with one, the ones that most of the Marketing Gurus use are AWeber and GetResponse. They all charge monthly rates that increase as your volume increases and it will end up costing you a chunk of change, so you better be making good revenues from the mailings to make it worthwhile.
Switching to such a service may be frustrating. Many of them don't let you just add your existing list, but require that you contact all your people and get them to opt in again. Many will also require you always use double-opt-in signups, where they have to respond to an email before they get added. You'll have to consider this in selecting a service.
What I was going to do was find an SMTP service that I can use to send my mailings to. I looked around for awhile but this was not a service that was easy to find. Basically, I wanted someone to accept my e-mails and send them out. Simply an SMTP server.
It so happens, I found out that Plimus, the service I use for selling my software was a partner of a webhost that provided SMTP services for them. The webhost was DewaHost, and you can get a hosting account specifically for their servers dedicated to SMTP. You do need to contact DewaHost directly to sign up with them, but their monthly rates are reasonable, up to about $40 a month for unlimited emails.
There are, of course, others. You can look up "SMTP Server Hosting" on Google but I can't vouch for the others. You'll notice DewaHost quite high up on that list.
In your comment on your own question, you say you'd like "some sort of nice neat online interface which shows all of the emails we sent, and allows me to resend them if the user requests". I think you're running into trouble trying to get a service to do that. If you're already using your own ASP.Net program to generate your own emails and maintain your list, it should be your own program or an add-on to it, like the Spd E-Letter that I used.
If you want an ASP.Net solution, there are several packages available, for example Absolute Newsletter.
I hope this helps you.
Louis
Depending on your usage requirements, have you considered using gmail? Google provides a nice secure smtp service and cool (free) goodies for hosting your own domain email using google.
To add to Matt's answer above, CakeMail also offers a Relay API Class that allows for one-off emails. You can interface with our API with one of our libraries.
Cheers,
Francois # CakeMail