Hi Lillebror,
Referring only to the code in the original question, it looks like there is a mix up between the variables used to define the duration of the signal and the sample period to generate the samples of the same, but it's hard to say because the entire code is not posted in the question. I think you're looking for something like this.
Define the signal of interest
xfunc = @(t) exp(-a.*t).*((t >= 0) & (t <= T));
Pick a sampling period Ts. Though not really necessary, choose Ts such that T/Ts is a nice integer
Define the frequency vector for the CTFT of x(t) and then compute the CTFT
omega_c = linspace(-pi/Ts,pi/Ts,4097);
XCTFT = (1 - exp(-(a + 1i*omega_c)*T)) ./ (a + 1i*omega_c);
Samples of x(t)
Adjust the endpoint to account for the effect of impulse sampling at discontinuities. I think this is similar to your adjustment of xf(1).
Compute the DFT
Do the fftshift and get the associated frequency vector for N odd
omega_n = (-(N-1)/2 : (N-1)/2)*2*pi/N/Ts;
Compare, note the scaling by Ts on the DFT
plot(omega_c,abs(XCTFT));
stem(omega_n,abs(Ts*XDFT));
plot(omega_c,180/pi*angle(XCTFT));
stem(omega_n,180/pi*angle(T*XDFT));