How to trigger an email to someone who opens an account but never signs in? Assume a user visited your site and signed up for an account, but such user never did Sign in to your site anymore.

Is there any way to generate mails to such visitors, for letting them know about your products and services?
Yes there is a way to use the Rules module for this (as the tagging of your question seems to indicate), as detailed below ...

Step 1 : Create a Rules Component to send an eMail

Create a Rules Component  (say "Rule1") for sending an eMail that corresponds to the eMail you have in mind "... for letting him know about your products and services ...". This Rules Component itself will not do anything on its own. Instead it will be used in a subsequent step.

Have a look at "Step 2" of my answer to "How to send an email to an author on a specific date using date field specified in a node?" for an example of such Rules Component.

If you have multiple types of eMails in mind, then create 1 such Rules Component for each of them.

Step 2 : Schedule an eMail reminder

Create a rule (say "Rule2") which uses Rules Event "After saving a new user account" to schedule the execution of the Rules Component created in Step 1, e.g. X days after the new account was created.

Have a look at "Step 3" of my answer to "How can I set a reminder for a specific user to be triggered on a specific date?" for an example of how to schedule the execution of a Rules Component. More specifically the part in the Rules Action that starts with "schedule" (for this ignore the part with "schedule_delete").

If you have multiple types of eMails in mind (e.g. 1st eMail after X days,  2nd eMail after Y days, 3rd eMail after Z days) then schedule the execution of all these Rules Components right away. Or create a chain whereas the 1st Rule Component (for after X days), will schedule the 2nd Rule, etc.

Attention: if you're planning for multiple eMails, you should use some 'convention' to identify the scheduled eMails. E.g. by using an "identifier" (within "schedule") that is not just "[account:name]", but instead something like (e.g.) "[account:name]-1", "[account:name]-2" and  "[account:name]-3".

If nothing happens (i.e. if such newly created user never logs in, you have your desired eMails in place for being sent after X (and or Y, and or Z) days.

Step 3: Cancel eMail reminders when user logs in

Create a rule (say "Rule3") like so:


Use Rules Event "User has logged in".
Add a Rules Condition using "Data value is empty" to check if account:last-login is actually empty. If that's the case, it implies this user logs in for the very first time, which is exactly what you are interested in. Because from then on, you don't want to send the scheduled eMails anymore.
Add a Rules Action to delete (cancel) the scheduled eMails. Have a look at "Step 3" of my answer to "How can I set a reminder for a specific user to be triggered on a specific date?" for an example of how to delete (cancel) the planned execution of a scheduled Rules Component. More specifically the part in the Rules Action that starts with "schedule_delete" (for this ignore the part with "schedule").

Attention: if you're planning for multiple eMails, you should use some 'convention' to identify the scheduled eMails to be deleted (cancelled). E.g. by using an "identifier" (within "schedule") that is not just "[account:name]", but instead something like (e.g.) "[account:name]-1", "[account:name]-2" and  "[account:name]-3". And of course make sure these identifiers match with the convention you've used in Step 2 (to schedule those eMails).