With the below code we can send individual emails to the users with an ICS file as attachment.
ICS is a global format for calendar files widely being utilized by various calendar and email programs including Google Calendar, Apple iCal, and Microsoft Outlook. These files enable users to share and publish information directly from their calendars over email or via uploading it to the world wide web.
Step 1 :
Compile the below code
CREATE OR REPLACE FUNCTION ical_events (
p_summary IN VARCHAR2,
p_description IN VARCHAR2,
p_start_date IN DATE,
p_end_date IN DATE
)
RETURN VARCHAR2
AS
lv_desc VARCHAR2 (20000);
lv_summary VARCHAR2 (10000);
lv_dtstart VARCHAR2 (100);
lv_date VARCHAR2 (100);
lv_dtend VARCHAR2 (100);
l_retval VARCHAR2 (32767);
l_lf CHAR (1) := CHR (10);
BEGIN
lv_summary := 'SUMMARY:' || p_summary;
lv_date :=
'DTSTAMP:'
|| TO_CHAR (SYSDATE, 'RRRR-MM-DD')
|| 'T'
|| TO_CHAR (SYSDATE, 'HH24:MI:SS');
lv_dtstart :=
'DTSTART:'
|| TO_CHAR (p_start_date, 'RRRR-MM-DD')
|| 'T'
|| TO_CHAR (p_start_date, 'HH24:MI:SS');
lv_dtend :=
'DTEND:'
|| TO_CHAR (p_end_date, 'RRRR-MM-DD')
|| 'T'
|| TO_CHAR (p_end_date, 'HH24:MI:SS');
l_retval :=
'BEGIN:VCALENDAR
VERSION:2.0
PRODID:-// Oracle Application Express //ENCAL
SCALE:GREGORIAN
BEGIN:VEVENT
'
|| lv_date
|| CHR (10)
|| lv_dtstart
|| CHR (10)
|| lv_dtend
|| CHR (10)
|| lv_summary
|| CHR (10)
|| lv_desc
|| '
SEQUENCE:0
END:VEVENT
END:VCALENDAR';
DBMS_OUTPUT.put_line (l_retval);
RETURN l_retval;
END ical_events;
Step 2:
Use APEX to create the necessary items to collect the following details:
1. Start Date
2. End Date
3. Summary
4. Description
Step 3 :
Execute the below PLSQL process to send email with ICS file
DECLARE
l_id NUMBER;
l_ical_event VARCHAR2 (32767);
l_blob BLOB;
BEGIN
BEGIN
SELECT ical_events (p_summary => :p2_summary,
p_description => :p2_description,
p_start_date => :p2_start_date,
p_end_date => :p2_end_date
)
INTO l_ical_event
FROM DUAL;
END;
BEGIN
l_id :=
apex_mail.send (p_from => 'notification-noreply@doyensys.com',
p_to => 'priyadharshini.ramesh@doyensys.com',
p_subj => 'Subject of the Email',
p_body => 'BODY',
p_body_html => 'HTML - BODY'
);
EXCEPTION
WHEN OTHERS
THEN
raise_application_error (-20004,
'Error in sending an Email' || SQLERRM
);
END;
l_blob := UTL_RAW.cast_to_raw (l_ical_event);
--Converting Varchar2 to BLOB content
BEGIN
apex_mail.add_attachment (p_mail_id => l_id,
p_attachment => l_blob,
p_filename => 'training.ics',
--Name of the ICS file
p_mime_type => 'application/hbs-ics'
);
END;
END;
awesome.. worked perfectly.. many thanks...
ReplyDeleteWorks great, thank you :)
ReplyDeleteIn the function, the description isn't being set so the calendar doesn't have the body text.
Also, you can add location as well with "LOCATION:" using the same method for summary.
Hi,
ReplyDeleteIt is working fine. If I confirm yes then add the gmail calendar otherwise it does not display or auto sync in gmail calendar. But i need auto sync in gmail calendar. What can i do? Please any one help me.
Hi @blog
DeleteYou can use Google CalDAV API to add events without any user intervention (initially after the user has allowed access to your app). You will have to generate authorization token using clientID and clientSecret (store for every user in your local repo). There's a neat demo available here: https://youtu.be/tNo9IoZMelI
There are a lot of resources available to help you out with the specific tech/platform you want to use.
It didn't work for me. The plsql process running successfully but didn't get any email.
ReplyDeleteYou have to add apex_mail.push_queue; at the end
Delete