Let's assume I want a contract with function that sends X Ether each month. A user agrees to send a certain amount of Ether to the contract every month, and makes a transaction corresponding to a function call with X as one of the arguments.
The ideal way would be to automatically send the Ether every month, and handle exceptions planned in the contract if the user doesn't have enough Ether.
I don't want to have to send a big number of Ether at once, like a year's worth every year, but that would mean that the contract is allowed to debit Ether by itself.
How would that work in practice, is it possible?