Yes you could do this through rules granted the product expiration date is a field.
Create a new rule to run on cron maintenance tasks
Condition--> has field name
Pick your field name
Action--> execute custom PHP.
I don't know what your level of PHP experience is so I'll hold off on putting any code down, but the next step would be to write a short snippet of PHP that takes the sites current datetime and checks the values of your chosen field for values that are 7 days away from expiration (rules should give you tokens for both items).
- Then in that same custom PHP area use rules_action_mail() to send the email out with the results (for reference: https://drupal.org/node/322834).
You could also do this with a SQL query in the PHP area: http://www.barnettech.com/content/dbquery-drupal-creating-sql-queries-drupal-way . Just run through your field in the database and check for the values you need, then return the results in the mail message.
If I were to do something like this, I would implement hook_cron() in a custom module: https://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_cron/7 vs. using Rules since it would require less steps.
Edit: As requested:
See here to make a Drupal 7 module: https://drupal.org/node/1074360
Using hook_cron would go something like:
function mymodule_cron(){
myfunctions();
}
function myfunctions(){
//do cool stuff
}
As far as what would go into "myfunctions", it would probably be a query on the database, returning those results, then sending those results in an email with mail(). That would be it.