this is the flow 5 days ahead:

- recurrence every day at the time you want the mail to be send
- get items from sharepoint list
- calculate today: formatdatetime(UTCNow(),'dd-MM')
- calculate today+5: formatdatetime(addDays(utcNow(),5),'dd-MM')
- init varpictureURL (optional) as String
- init varBirthdayboy as String
- init varOthersEmail as Array
- init varGetBirthDateFromSP as String
- check if birthday occurs (parallel branch):

for every value in the Sharepoint List:
- compose the birthdate from SP: substring(get items(dayofbirth),0,5) to get it in the same format
--> branch condition birthdayboy: if outputs(today + 5) = outputs(birthdate from SP) you know that in 5 days a birthday is coming up
- if yes: append that name to a string varbirthdayboy
- append pictureURL to varPictureUrl (totally optional)
- append to string varGetBirthdateFromSP: outputs(birthdate from SP) --> you will need this later on

--> branch condition othersemail
- if outputs(today + 5) not equals outputs(birthdate from SP) you know that it's not that persons birthdate
- if yes: append the email address to varOthersEmail
Right now you will have to variables: Varbirthdayboy will contain the name of the birthdayboy and varothersemail will contain all the email addresses of the others. Let's check if it's actually somebody's birthday today (outside the loop):

- if the length(varbirthdayboy) not equal to 0 (it's somebodys birthday)
- yes: compose the TO address of the mail: join(variables('varothersemail'),';') --> because this was an array it will join all the email addresses with a ';' into one string that you can use in your TO field of your mail
- send an email: "our colleague 'varbirthdayboy' has a birthday coming up in 5 days"
TO = output(compose TO address)
subject = in 5 days it's the birthday of "varbirthdayboy"
-if no: terminate the flow because it's nobody's birthday in 5 days
This works for small teams and you need to maintain the sharepoint list (or excel if you like) manually. Joiners and leavers should be updated regularly