Take a look at this question
https://asktom.oracle.com/pls/apex/asktom.search?tag=guidance-on-utl-smtp It has a routine to send html formatted email, but basically describes how to "carve" an email into a message and an associated attachment using data from the database.
Once you have it running as a procedure, then you can use the scheduler to automate that, eg
dbms_scheduler.create_job (
job_name => 'MY_CSV_EMAILER',
job_type => 'PLSQL_BLOCK',
job_action => 'begin my_procedure; end;',
start_date => sysdate,
repeat_interval => 'FREQ=MONTHLY',
enabled => true);