Start with an aspx page that contains just a literal control like this... <%@ Page Language="vb" AutoEventWireup="false" Codebehind="vCalendarFile.aspx.vb" Inherits="Scheduler.vCalendarFile" %> ...then in the code behind, during page load... Dim dateStart As DateTime = someDateTimeObject Dim dateEnd As DateTime = someOtherDateTimeObject ' Note...Outlook will want GMT times. That's why we need to convert to universal time. dtstart = dateStart.ToUniversalTime.ToString("yyyyMMdd\THHmmss\Z") dtend = dateEnd.ToUniversalTime.ToString("yyyyMMdd\THHmmss\Z") location = Helper.GetLocationName(_locationID) description = "This appointment was generated=" & vbCrLf & _ "to serve as a reminder of your registration time. Click the 'Save and =" & vbCrLf & _ "Close' button above to enter this appointment into your calendar." summary = " PUT SUBJECT OF THE REMINDER HERE" fileName = "PUT NAME OF THE GENERATED VCS FILE HERE" Dim content As New System.Text.StringBuilder content.Append("BEGIN:VCALENDAR") content.Append(vbCrLf) content.Append("PRODID:-//Microsoft Corporation//Outlook MIMEDIR//EN") content.Append(vbCrLf) content.Append("VERSION:1.0") content.Append(vbCrLf) content.Append("BEGIN:VEVENT") content.Append(vbCrLf) content.Append("DTSTART:") content.Append(dtstart) content.Append(vbCrLf) content.Append("DTEND:") content.Append(dtend) content.Append(vbCrLf) content.Append("LOCATION:") content.Append(location) content.Append(vbCrLf) content.Append("DESCRIPTION;ENCODING=QUOTED-PRINTABLE:") content.Append(description) content.Append(vbCrLf) content.Append("SUMMARY:") content.Append(summary) content.Append(vbCrLf) content.Append("PRIORITY:3") content.Append(vbCrLf) content.Append("END:VEVENT") content.Append(vbCrLf) content.Append("END:VCALENDAR") Me.litText.Text = content.ToString() Response.AddHeader("content-disposition", "inline; filename=" + fileName + ".vcs") Response.ContentType = "text/plain"