Seen that you also have an account over at mathematica stackexchange I am going to show an implementation using Mathematica. This is certainly not the only way you can do it but hopefully gets you started.
We start by creating a 1D mesh
Needs["NDSolve`FEM`"]
region = Line[{{0}, {1}}];
includePoints = {{1/3}, {2/3}};
mesh = ToElementMesh[region, "IncludePoints" -> includePoints,
"MaxCellMeasure" -> 0.0008]
The mesh has points included at 1/3 and 2/3. This is where we will position the point sources later. I also refined the mesh, because I am going to add a convection term which will make this PDE convection dominant (large Peclet number).
We set up the dependent variable, the mass concentration $c$, time variable $t$ and the spatial independent variable $x$. Also some material properties are defined.
vars = {c[t, x], t, {x}};
pars = <|"DiffusionCoefficient" -> 1,
"MassConvectionVelocity" -> {100}|>;
For the point sources the idea is to use a regularized delta function. The Dirac delta function poses a problem in numerical simulations with FEM implementation that is not prepared to take it as an input. This is because the Dirac delta function is singular at the source location $X_s$ and needs special treatment that differs from how FEM treats other terms. This can be avoided with an approximation to the Dirac delta function. The process of approximating the Dirac delta function is called regularization.
RegularizedDeltaPoint[g_, X_List, Xs_List] :=
Piecewise[{{Times @@ Thread[1/(4 g) (1 + Cos[\[Pi]/(2 g) (X - Xs)])],
And @@ Thread[RealAbs[X - Xs] <= 2 g]}, {0, True}}]
More information about this can be found in the Heat Transfer tutorial. The process for mass transport is the same. So if you also want to volume sources you can proceed in the same way as mentioned in that tutorial.
Subscript[h, mesh] = Sqrt[Min[mesh["MeshElementMeasure"]]];
Subscript[gamma, reg] = Subscript[h, mesh]/2;
The regularization function needs a parameter gamma, which is based on the minimal element diameter. Let's construct the point source at the first included point and visualize it.
temp = RegularizedDeltaPoint[Subscript[gamma, reg], {x},
includePoints[[1]]];
Plot[temp, {x, 0, 1}]

You see that this is an idealized approximation to the delta distribution. Note that
Integrate[temp, {x, 0, 1}]
1.
The Comsol approach uses a weak formulation. That is a different approach. I am trying to show that (point) sources can be set up in different ways.
Qp = 10;
pars["MassSource"] =
RegularizedDeltaPoint[Subscript[gamma, reg], {x},
includePoints[[1]]]*Qp +
RegularizedDeltaPoint[Subscript[gamma, reg], {x},
includePoints[[2]]]*If[t > 1/2*10^-3, 5*Qp, 0];
Qp
is the point source strength. The unit would be [$mol/(m^3 s)$], because the regularization function is dimension less the source has the same units as the overall PDE components, see here. The first point source is active all the time while the second only starts at a specific time but is stronger.
We set up the PDE and solve it.
pde = {MassTransportPDEComponent[vars, pars] == 0, c[0, x] == 0};
tEnd = 10^-3;
cfun = NDSolveValue[pde, c, {t, 0, tEnd}, {x} \[Element] mesh];
Visualize / explore the result.
Manipulate[
Plot[cfun[t, x], {x} \[Element] region,
PlotRange -> {{0, 1}, {0, 1/2}}], {t, 0, tEnd}]

More information can be found in the Mass Transport tutorial and the MassTransportPDEComponent.
I hope this is useful to you.
Update for older version:
The code I posted above works for version 12.3. Since the OP has 12.0 the following is the same code, suitable for version 12.0. In essence the MassTransportPDEComponent
is not available in 12.0. But that's not a problem as one can write the PDE manually. Here is the complete code:
This first part is the same as before:
RegularizedDeltaPoint[g_, X_List, Xs_List] :=
Piecewise[{{Times @@
Thread[1/(4 g) (1 + Cos[\[Pi]/(2 g) (X - Xs)])],
And @@ Thread[RealAbs[X - Xs] <= 2 g]}, {0, True}}];
Needs["NDSolve`FEM`"]
region = Line[{{0}, {1}}];
includePoints = {{1/3}, {2/3}};
mesh = ToElementMesh[region, "IncludePoints" -> includePoints,
"MaxCellMeasure" -> 0.0008];
Subscript[h, mesh] = Sqrt[Min[mesh["MeshElementMeasure"]]];
Subscript[gamma, reg] = Subscript[h, mesh]/2;
This part is where things change. I added a parameters section and added a manual form of the PDE.
parameters = {kappa -> {{1}}, v1 -> 100,
gamma -> Subscript[gamma, reg], Qp -> 10};
pde = {Derivative[1, 0][c][t, x] +
Inactive[Div][(-kappa) .
Inactive[Grad][c[t, x], {x}], {x}] + {v1} .
Inactive[Grad][c[t, x], {x}] -
Qp*RegularizedDeltaPoint[gamma, {x}, {1/3}] -
If[t > 1/2000, 5*Qp, 0]*
RegularizedDeltaPoint[gamma, {x}, {2/3}] == 0,
c[0, x] == 0} /. parameters;
tEnd = 10^-3;
cfun = NDSolveValue[pde, c, {t, 0, tEnd}, {x} \[Element] mesh];
This should give you the same result in version 12.0.
Update: Cloud version
Another alternative is to use the wolfram cloud. Here is a cloud version of the notebook.
VectorTools::create_point_source_rhs()
function help? dealii.org/developer/doxygen/deal.II/… $\endgroup$