Usa un placeholder (contenitore di altri controlli) nella parte ASPX:
codice:
       <asp:PlaceHolder ID="ph" runat="server"></asp:PlaceHolder>  
       <asp:Button ID="mail_btn" runat="server" Text="invia mail" OnClick="invia_mail" />

Nel code-behind (.VB) invece, nella sub Page_Load (deve passarci ad ogni postback), un ciclo sulle stringhe estratte dalla Split:

codice:
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim file_nome() As String
        Dim i As Integer

        Session("file_upload") = "stringa1__stringa2__stringa3__stringa4"
        file_nome = Split(Session("file_upload"), "__")
        ph.Controls.Clear()

        For i = 0 To UBound(file_nome)
            Dim tb As New TextBox
            tb.ID = "tb" & i
            tb.Text = file_nome(i)
            ph.Controls.Add(tb)
        Next
    End Sub

   Sub invia_mail()
       '
   End sub
Attenzione al ciclo, gli elementi dell'array partono dalla posizione 0.