Sending mail to 100 users using SSIS mail task - ssis

I have to send mails to 100 people by using SSIS send mail task. but in SSIS mail box To address text box is having 255 characters limit where it's not allowing me to do. So could you please suggest the best way to achieve this..?

Something like this:
First task (GetUnsentEmail(s)) to select Email address (stored in a table) where 'flag' = 0 and puts those records into an object variable.
The Foreach Loop Container loops through each record in that object variable and:
puts values into variables
executes the task "Send Mail Task" which uses those variables to
send the email
executes the sql task "Update send email table" which sets 'flag' to 1
I hope this help.

Related

Dynamically attach Files to the email in SSIS

I have a requirement to send invoices as attachment to customers.
As shown in the above screenshot a table in the database contains Name of the customer and attachment name (which contains name). I need to iterate through this table and send attachment to concerned customer. These same attachments are saved in a folder. Please Help me with an approach.
As Alleman pointed out, sp_send_dbmail is the best option to go about doing the task. The only permissions that one needs to be assigned is DatabaseMailUser database role in the msdb database.
However if you feel it needs to be addressed via SSIS. Here are the steps to follow -
Create a object variable say objInvoiceAttachmentList and following three variables - sCustomerName, sAttachmentFullFilePath, sMailId
Use 'Execute SQL Task' and run a query to get the list of customers data as below. Set the result set as 'Full Result Set'. In the 'ResultSet' tab assign it to a above object variable. (Am assuming you have a column called MailId for your customers)
select name,attachment,MailId from dbo.InvoiceAttachments
Use 'For Each Loop Container'. In the 'Collection' set the enumerator as 'Foreach ADO Enumerator' and give the collection variable as objInvoiceAttachmentList. In 'Variable Mappings' tab, assign the three variables in the order of the query.
Use 'Send Mail Task' within the foreach loop task. Go to 'Expressions' and set the appropriate variables with a proper valid SMTP Connection.
It's easy in SSIS.
get the file name to a variable in SSIS
open the send mail task then go to expression.
then you can set the FileAttachment property to above variable.
You don't need to use SSIS. In fact, SSIS is really not a very good tool for this.
sp_send_dbmail can send attachments from the file system. Use the #file_attachments parameter.

SSIS, Foreach Loop, Event Handler when it writes 0 records due to file containing zero records

I have a foreach loop container in my SSIS package. the Data Flow task imports xls files from a certain directory. If the xls file contains no data, the package shows in the log that it wrote 0 records. This is fine; however, I would like to envoke an event handler that will notify the user (email) or my user interface will pop up a message...that no records were processed.
Is this possible? If so, I wasn't sure what Event Handler to choose and how to configure properly.
Create an integer variable.
Place a rowcount task between the source and destination of the dataflow, and map the step to the variable.
Create an email task and connect the dataflow task to it with a
"Success" constraint and an expression evaluation.
Insert the following value into the expression: " == 0".
This will send an email only when the dataflow results in zero
records.

PHPmailer list from mysql, not sending to all

I am running a PHPmailer Send() from a list of 600+ members but only a selected few receive the email anything from 40 to 100 and the selection is random throughout the database
I presume it has something to do with PHPmailer not keeping up with the speed of requests
On each 'for' I reset the 'to' with ClearAddresses(), the body is less than 100 words and no attachments
Any ideas
Use Thread or give some sleep time
Did your hostingprovider regulate the Mail-traffic?
In other way, you can replace the mail() function with an Array. At the end of the script, you can print_r($Array); and you can validate your loops.

Send Mail Task based on output from Execute SQL Task

How to send an email based on the ouput from the execute SQL Task in SSIS? If the query returns any results I would like to send an email if not the email should not be sent.
Do you want to send the results of the query in the mail or not?
Either way, you can do this:
Capture the number of rows returned by your query in a variable
Use an expression in your precedence constraint to send the email only if the rowcount was greater than zero
If you want the results of the query in the email, then the simplest thing is probably to write them to a flat file and then send the file as an attachment.
Alternatively, do the whole thing in a stored procedure using sp_send_dbmail and just call the procedure from your package.
It's probably a bit clunky, but you could send the results of your Execute SQL task to a variable, then use a For Loop container based on that variable. Put the Send Mail task within that For Loop container. The challange in that is only running the Send Mail once, no matter if the count is 1 or more. If your count was saved as a bool, perhaps that would work?
You could put another step in between, put in a Script Task that takes the count and returns a 0 or 1, and then use the For Loop with the Send Mail task within.
Like I said, clunky.

Send email to dynamic recipient SSIS Send Mail Task

I have an SSIS package which is going to be deployed on test, staging, and finally production.
It has a couple of "Send Mail Tasks",say 10.
As developer, I put my email address as the recipient of the email.
Currently, for the test person, I need to change all the "To"s in all the script task to e.g. "TestPerson#test.com". If following the paradigm of hard-coding the emails this way,I need to change the recipient email 30 times!!! (10 for each stage stated above)
Just wondering if there is any way to inject To field(recipient) dynamically. e.g. from a variable. like I have done for the "MessageSource"
You can set the ToLine of the Send Mail task to be the value of a variable, using an Expression from the Properties window of the task.
We use a SQL table containing a list of email recipients for various conditions (table columns of kemail, emailaddress, success, error) and set flags in the table to 0=no, 1=yes for that particular user to receive emails on particular conditions.
Then create a variable that contains a delimited list of your recipients then use an expression to set "ToLine" for the send mail task.
The only thing to watch here is that you don't end up with a no records returned from the SQL table. We always have our "support" email address always having all the bits set, to avoid this.
So the package wont need to be modified when a new user needs to receive email updates.