Proving the Borel-Cantelli Lemma
The proof is almost perfect, only in the end it is not necessary true that $m(\cup_{k\geq N}E_k)=\sum_{k=N}^\infty m(E_k)$ since the sets $E_k$ might not be pairwise disjoint. So the measure of the union is only at most the sum of measures. But in our case it doesn't change anything for the proof, since we anyway get $m(S_N)\leq\sum_{k=N}^\infty m(E_k)\leq\epsilon$. Still it is important to remember the correct properties of measure.
Your proof is fine, modulo the comment in the other answer. For another approach, which I think is the way Rudin does it, note that $x\in E$ if and only if the series $\sum^{\infty}_{k=1}1_{E_k}(x)$ diverges.
Set $s_n(x)=\sum^{n}_{k=1}1_{E_k}(x).$ Then, $s_n(x)\to s(x)=\sum^{\infty}_{k=1}1_{E_k}(x)$ and the monotone converge theorem gives $\sum^{n}_{k=1}m(E_k)\to \sum^{\infty}_{k=1}m(E_k)<\infty.$ Thus, $s\in L^1(m)$, so the series converges almost everywhere $m$. That is, the set on which it diverges, namely $E$, has Lebesgue measure zero and so $m(E)=0.$
Remark: since we proved that $m(E)=0,$ we get part $(a)$ for free.