Do you know how to write scripts?
You can write a script set to run each time the file is opened to find any records where this email needs to be sent. This script can be made sophisticated enough that you can open and close the file several times in one day but only send one email out.
Will the date of birth field ever be equal to to today's date? I think you want the month and day to match the month and day of today's date here.
For relatively small numbers of records, you might define a "Birthday" field:
Date (Month ( DOB ) ; Day ( DOB ) ; Year (Get ( CurrentDate ) ) )
This calculation must be set as an Unstored calculation.
Define an extra date field, eMailSent to keep from sending the same email twice.
Your script might look like this:
Enter Find Mode 
Set Field [YourTable::Birthday ; Get ( CurrentDate ) ]
Set Field [YourTable::eMailSent ; "< " & Get ( CurrentDate ) ]
Set Error Capture [on]
If [ Get ( FoundCount ) > 0 /* records were found */ ]
Send Mail // set up your email here, there's an option that lets you send the same email to all the records in your found set
Replace Field Contents [no dialog ; YourTable::eMailSent ; Get ( CurrentDate ) ]
For faster searching of larger numbers of records, you can define two number fields in place of the Birthday calculation:
cMonth Month ( DOB )
cDay Day ( DOB )
These should be stored, indexed fields
Replace step 2 with these two steps:
Set Field [YourTable::cMonth ; Month ( Get ( CurrentDate ) ) ]
Set Field [YourTable::cDay ; Day ( Get ( CurrentDate ) ) ]
Since these two fields are indexed, your finds will perform more quickly--especially if you have a large number of records in the table being searched.
Thanks for the fast response!!